在primefaces对话框中,我首先显示一个带有一些输入字段的表单。如果用户单击按钮,则打开图像或pdf,并使用p:layout分隔对话框。为此,我在editProperty.xhtml中包含了输入字段的渲染,并在对话框中包含了两次。在panelGroup中,仅显示输入字段,也显示在p:layout内。我用panel属性排除了panelGroup和布局。所以我的期望是只有对话框显示布局或面板组。 初始UI显示没有p:布局,但字段呈现两次。
<o:form id="editPropertyFormId">
<p:dialog id="editPropertyDialogId" widgetVar="editPropertyDialogVar" modal="true">
<!-- <c:if test="#{editPropertyContentBL.isContentViewerCollapsed() == false}"> -->
<p:layout id="editPropertiesLayoutId" style="width: 100%; height: 100%;" onResize="adjustContentViewerSize();"
widgetVar="editPropertiesLayoutVar" rendered="#{editPropertyContentBL.contentViewerCollapsed == false}">
<p:layoutUnit id="editPropertiesFieldsLayoutId" position="west" resizable="true" size="400"
style="padding-right: 5px !important;" collapsible="false">
<ui:include src="/sections/edit/editProperty.xhtml">
<ui:param name="idPrefix" value="editPropsInLayout" />
<ui:param name="editPropertyBLInstance" value="#{editPropertyBL}" />
<ui:param name="editPropertyContentBLInstance" value="#{editPropertyContentBL}" />
</ui:include>
</p:layoutUnit>
<p:layoutUnit id="editPropertiesContentViewerLayoutId" position="center" resizable="true"
styleClass="contentViewerLayout">
<ui:include src="/sections/content/contentViewer.xhtml" />
</p:layoutUnit>
</p:layout>
<!-- </c:if> -->
<!-- <c:if test="#{editPropertyContentBL.isContentViewerCollapsed() == true}"> -->
<h:panelGroup rendered="#{editPropertyContentBL.contentViewerCollapsed == true}">
<ui:include src="/sections/edit/editProperty.xhtml">
<ui:param name="idPrefix" value="editProps" />
<ui:param name="editPropertyBLInstance" value="#{editPropertyBL}" />
<ui:param name="editPropertyContentBLInstance" value="#{editPropertyContentBL}" />
</ui:include>
</h:panelGroup>
<!-- </c:if> -->
</p:dialog>
如果我使用c:if(在代码中取消注释),似乎ui:参数不起作用,因为editProperty.xhtml中的更新不起作用:
<p:inputText id="#{idPrefix}editPropertyChoiceListValueId"...
<p:commandButton update="#{idPrefix}editPropertyChoiceListValueId"
我得到一个例外,找不到“editPropseditPropertyChoiceListValueId”。可能ui有问题:在c:if?
中包含/ ui:param由于 奥利弗
答案 0 :(得分:0)
两次渲染内容的问题是在包含的xhtml中数据绑定dataTable:
<h:dataTable binding="#{editPropertyMainTableBinding}"
我用它来获取当前行索引:
<ui:param name="curDummyCssClass" value="editPropertyChoiceDummyCssClass#{editPropertyMainTableBinding.rowIndex}" />
我消除了这个后,双重渲染消失了。 UI渲染似乎也快得多。 我还删除了“c:if test”和渲染的东西,将内容放在单独的xhtml文件中并包含它:
<ui:include src="#{editPropertyContentBL.contentViewerCollapsed == true ? '/sections/dialog/editPropertyDialogContent.xhtml' : '/sections/dialog/editPropertyWithContentViewerDialogContent.xhtml'}" />
我不认为这与双重渲染有关,但删除了不受欢迎的c:if标记。