0

我将 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>

包括AbleEditor.xhtml

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

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

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

你有什么建议吗?

非常感谢!

4

1 回答 1

2

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

主页

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

包括AbleEditor.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/

于 2015-06-05T16:00:04.297 回答