0

这是我的 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。

4

1 回答 1

1

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

也许您FacesServlet基于某些教程或 IDE 自动生成的代码被映射到不同于 的 URL 模式*.xhtml,例如*.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>
    

也可以看看:

于 2013-05-21T16:50:59.260 回答