ui:param中的参数未传递

  • 本文关键字:参数 param ui jsf jsf-2
  • 更新时间 :
  • 英文 :


我是JSF的新手,试图了解include和param是如何工作的,但一直停滞不前。非常感谢您的帮助。

我有两个简单的页面(用于测试),Page1.xhtml和Page2.xhtml。当我直接调用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@会话范围公共类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;
}
}

我希望在Page1上看到"123"作为输出Id,而不是"11111",这是没有传入参数时的默认值。但是,我总是看到11111。我的期望错了吗?

首先,包含处理不当:包含的页面应该只由<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对"如何使用JSF 2.0 Facelets在XHTML中包含另一个XHTML?"的回答?。

接下来,只需通过包含页面中的#{paramName}访问包含的参数,如:

<h:outputText value="#{paramName}" />

在您的情况下,参数名称为id

代码还有其他一些缺点,比如滥用会话范围和嵌套的HTML表单,但这是另一个问题。最后但并非最不重要的是,您必须了解如何在视图中处理托管bean。

最新更新