0

我是 JSF 的新手,并试图了解 include 和 param 如何工作,但一直卡住。任何帮助深表感谢。

我有 2 个简单页面(用于测试目的),Page1.xhtml 和 Page2.xhtml。我想在 Page1 中使用一个参数将 Page2 包含到 Page1 中。当我直接调用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。我的期望错了吗?

4

1 回答 1

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 对如何使用 JSF 2.0 Facelets 在 XHTML 中包含另一个 XHTML的回答是一个很好的参考点?.

接下来,在#{paramName}包含的页面中可以简单地访问包含的参数,例如:

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

参数名称id在您的情况下。

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

于 2013-07-22T19:49:57.467 回答