每个include都应该引用其他实例

时间:2015-06-05 13:38:53

标签: jsf jsf-2 reference uiinclude

我将XHTML页面的一部分包含在我的Web应用程序中。这部分可以多次包含。这就是问题所在!因为每个include都引用相同的java对象。这意味着每个元素都具有相同的值。但我希望每个包含一个新的Java对象。那么解决这个问题的最佳方法是什么?

主页包含:

<ui:composition template="./templates/template.xhtml">
<ui:define name="mainContent">

    <ui:include src="include/includeAbleEditor.xhtml">
        <ui:param name="includeParam" value="MyClass" />
    </ui:include>

    <ui:include src="include/includeAbleEditor.xhtml">
        <ui:param name="includeParam" value="YourClass" />
    </ui:include>

</ui:define>

includAbleEditor.xhtml

<h:commandButton value="#{editorVisibility.evb.value}"
                 action="#{editorVisibility.evb.toggle}" />

<h:inputTextarea rendered="#{editorVisibility.evb.enabled}" />

<h:inputTextarea>是我的问题的一个示例。每个包含的inputTextarea都有一个切换按钮。通过单击按钮,应显示或隐藏文本区域。但由于布尔value的相同引用,所有<h:inputTextarea>将始终具有相同的渲染值。

你有什么建议吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

您必须拥有与编辑器一样多的editorVisibility.evb实例。例如,您可以在List<TypeOfEvb> evbList bean中创建EditorVisibility,并仅将<ui:include>中的一个元素作为<ui:param>传递:

主页

<ui:include src="include/includeAbleEditor.xhtml">
    <ui:param name="includeParam" value="MyClass" />
    <ui:param name="evb" value="#{editorVisibility.evbList[0]}" />
</ui:include>

<强> includAbleEditor.xhtml

<h:commandButton value="#{evb.value}"
                 action="#{evb.toggle}" />
<h:inputTextarea rendered="#{evb.enabled}" />

您还可以创建复合组件。

另见:

http://www.mkyong.com/jsf2/composite-components-in-jsf-2-0/