这是我的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。
答案 0 :(得分:1)
因此,您将在浏览器中检索原始JSF源代码,而不是生成的HTML输出。浏览器显然不了解JSF代码(就像它不了解JSP / PHP / ASP / etc代码),但它只能理解HTML代码。这可能发生在FacesServlet
尚未被调用时,它就是负责所有JSF工作的人。
也许您的FacesServlet
基于某些教程或IDE自动生成的代码已映射到不同于*.xhtml
的网址格式,例如*.jsf
或*.faces
。在这种情况下,您有两个选择:
在浏览器的地址栏中修复请求网址,使其与该网址格式完全匹配。因此,假设它是*.jsf
,则不要通过
http://localhost:8080/context/index.xhtml
,而不是
http://localhost:8080/context/index.jsf
将网址格式直接修改为*.xhtml
。这在JSF 1.x中是不可能的,因为FacesServlet
会在无限循环中调用自身,但这在JSF 2.x中很有可能并且很多书/教程/资源/ IDE没有'考虑到这一点。
<url-pattern>*.xhtml</url-pattern>