我将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>
将始终具有相同的渲染值。
你有什么建议吗?
非常感谢!
答案 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}" />
您还可以创建复合组件。
另见: