【问题标题】:jsf bean not workingjsf bean不工作
【发布时间】:2013-05-21 16:36:35
【问题描述】:

这是我的 xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Keep alive</title>
    </h:head>
    <f:metadata>
        <f:viewParam name="value" id="value" value="#{myBean.val}" ></f:viewParam>
    </f:metadata>
    <h:body>

        Hello.<h:form><h:outputLabel value="#{myBean.val}"></h:outputLabel></h:form>
    </h:body>
</html>

这是我的豆子:

 import javax.faces.bean.RequestScoped;
    import javax.faces.bean.ManagedBean;

        import javax.persistence.EntityManager;
        import javax.persistence.PersistenceContext;


        @RequestScoped
        @ManagedBean
        public class MyBean {


        @PersistenceContext(unitName = "myPUhere")
        private EntityManager em;
        /**
         * Creates a new instance of myBean
         */
        public MyBean() {
            System.out.println("mybeanload");
             if (getWaarde() == "yes") {
                System.out.println("IT WORKS!!");
            }

    }
    private String val;

    public String getVal() {
        System.out.println("getting value");
        return val;
    }



     public void setVal(String value) {
            System.out.println("setting value to " + value);
            this.val = value;
        }
}

我的 Bean 对此没有响应,我在这里看不到什么?它不显示我在 URL 中输入的值,也不显示我的 outputLabel。

【问题讨论】:

  • 在浏览器中右键单击页面并执行查看源代码。您看到的是原始 JSF 源代码还是 JSF 生成的 HTML 输出?如果您仍然看到原始 JSF 源代码,那么它只是意味着根本没有调用 FacesServlet(因为请求 URL 与其 URL 模式映射不匹配)。
  • @BalusC 我看到了
    之类的东西——那肯定是错的。我该如何解决这个问题?

标签: jsf managed-bean


【解决方案1】:

因此,您在浏览器中检索原始 JSF 源代码,而不是其生成的 HTML 输出。浏览器显然不理解 JSF 代码(就像它不理解 JSP/PHP/ASP/etc 代码一样),但它只理解 HTML 代码。这可能在 FacesServlet 未被调用时发生,它是负责所有 JSF 工作的人。

也许您的 FacesServlet 是基于某些教程或 IDE 自动生成的代码映射到不同于 *.xhtml 的 URL 模式,例如 *.jsf*.faces。在这种情况下,您有 2 个选择:

  1. 修复浏览器地址栏中的请求 URL 以完全匹配该 URL 模式。所以,假设是*.jsf,那么就不要打开页面了

    http://localhost:8080/context/index.xhtml
    

    而是由

    http://localhost:8080/context/index.jsf
    
  2. 直接将 URL 模式修复为 *.xhtml。这在 JSF 1.x 中是不可能的,因为 FacesServlet 否则会在无限循环中调用自己,但这在 JSF 2.x 中是很有可能的,而且很多书籍/教程/资源/IDE 都没有考虑到这一点。

    <url-pattern>*.xhtml</url-pattern>
    

另见:

【讨论】:

  • 我是通过调用直接链接来尝试的。 pom.xml 包含一个自动生成的 /faces/* ,它破坏了一切。现在已解决此问题。谢谢:)
猜你喜欢
  • 2017-04-18
  • 2014-05-29
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2016-04-25
  • 2017-04-10
  • 1970-01-01
相关资源
最近更新 更多