替代ui:include用于在JSF 2.0中动态包含页面

时间:2012-06-19 14:59:09

标签: jsf-2 myfaces

在我开始之前:我在Tomcat 6上运行JSF 2.0 MyFaces,我已经在这个项目中使用了一些主要表面。

我有一个包含三个过滤下拉列表的页面,它在我的支持bean中设置了一堆参数。然后,这些参数用于包括下拉列表下的页面。我正在使用ui:include来包含这个页面,但我很确定ui:include每个生命周期只执行一次。这意味着该页面显示一次,并且在下拉列表更改时不会更改。

以下是我的观点示例

<h:form>
    <!-- dropdowns to build the route to the included page -->
    <h:selectOneMenu>
        <f:selectItems ... />
        <f:ajax 
           event="change" 
           render=":formInclude" 
           execute=":formInclude" 
           listener="#{control.handledd1Change}"/>
    </h:selectOneMenu>
    <h:selectOneMenu>
        <f:selectItems ... />
        <f:ajax 
           event="change" 
           render=":formInclude" 
           execute=":formInclude" 
           listener="#{control.handledd2Change}"/>
    </h:selectOneMenu>
    <h:selectOneMenu>
        <f:selectItems ... />
        <f:ajax 
           event="change" 
           render=":formInclude" 
           execute=":formInclude" 
           listener="#{control.handledd3Change}"/>
    </h:selectOneMenu>
</h:form>
<h:panelGrid id="formInclude">
    <ui:include src="#{control.formName}.xhtml"/>
</h:panelGrid>

所以,我想知道在JSF中动态包含页面的最正确方法是什么。我对ui是否正确:仅包括执行一次?还有什么我可以用来动态地包含一个页面吗?

1 个答案:

答案 0 :(得分:1)

事实证明我能够获得ui:insert在每次下拉更改后执行。我所要做的就是使用ajax执行并重新渲染它。这是我用来帮助找到自己的方式的页面:

How to include another XHTML in XHTML using JSF 2.0 Facelets?