每个包含都应该引用其他实例

Every include should refer to other instance

我将 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> 将始终具有相同的渲染值。

你有什么建议吗?

非常感谢!

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

传递给 <ui:include>

主页

<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/