我是JSF的新手并试图了解include和param的工作方式,但一直困扰着。任何帮助深表感谢。
我有2个简单的页面(用于测试目的),Page1.xhtml和Page2.xhtml。我想在Page1中使用和在Page1中将Page2包含在一个参数中。当我直接调用Page2时,我可以看到参数正确传递,但是当我调用Page1时,包含的Page2没有参数。以下是代码。
第1页:
<h:body>
<h:form id="test">
<b>Page 1</b><br/>
<ui:include src="Page2.xhtml">
<ui:param name="id" value="123" />
</ui:include>
<b>End of Page 1</b>
</h:form>
2页:
<h:head>
<f:view contentType="text/html"></f:view>
</h:head>
<h:body>
<h:form>
<h:outputLabel for="ID" value="ID on Page2: "/>
<h:outputText id="ID" value="#{pageTestBean.id}"/>
</h:form>
</h:body>
</html>
PageTestBean: @ManagedBean @SessionScoped 公共类PageTestBean {
private Long id=new Long(11111);
public void init() {
//doesn't do anything yet;
}
// Getters and Setters
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
我期望看到“123”作为Page1上的输出ID,而不是“11111”,这是没有传入参数时的默认值。但是,我总是看到11111.我的期望是错的吗?
答案 0 :(得分:1)
首先,您的包含内容处理不当:包含的内容应仅由<ui:composition>
组成,如下所示:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
...incuded page content...
</ui:composition>
一个很好的参考点是BalusC对How to include another XHTML in XHTML using JSF 2.0 Facelets?的回答。
接下来,只需通过附带页面中的#{paramName}
访问包含的参数,例如:
<h:outputText value="#{paramName}" />
在您的情况下,参数名称为id
。
您的代码还有一些其他缺点,例如滥用会话范围和嵌套HTML表单,但这是另一个问题。最后但并非最不重要的是你必须了解如何在视图中处理托管bean。