ui:param中的参数未传递

时间:2013-07-22 19:19:23

标签: jsf jsf-2

我是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.我的期望是错的吗?

1 个答案:

答案 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。