我有一个p:datatable,它基于p:commandButton进行更新,如下所示:
<p:commandButton id="diff" value="Run"
actionListener="#{difference.diffButtonListener}"
update="differenceContent infoPanel modificationTable" />
<p:dataTable id="modificationTable" value="#{difference.results}" var="code"
paginator="true"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="5,10,15,25,50" rows="5" style="width:100%"
resizableColumns="true" draggableColumns="true"
paginatorPosition="bottom"
rowKey="#{result.hashCode()}"
rowIndexVar="rowIndex">
<p:column styleClass="row-toggle" rendered="#{difference.toggleRowRendered}">
<p:rowToggler />
</p:column>
<c:forEach items="#{difference.columns}" var="col">
<ui:param name="rowValue" value="#{difference.getObjectValue(code, col)}" />
<p:column headerText="#{col.label}" >
<h:outputText value="#{rowValue}" styleClass="#{difference.getColStyleClass(rowIndex, code, col)}" />
</p:column>
</c:forEach>
<p:rowExpansion rendered="#{difference.rowExpansionRendered}">
<p:dataTable id="expandedTable" value="#{code.value}" var="modCode"
paginator="false" rows="10" rowKey="#{expandedResult.hashCode()}">
<!-- empty column for row toggler -->
<p:column style="width:16px"/>
<c:forEach items="#{difference.columns}" var="col">
<ui:param name="subRowValue" value="#{difference.getObjectValue(modCode, col)}" />
<p:column headerText="#{col.label}">
<h:outputText value="#{subRowValue}" styleClass="#{difference.getColStyleClass(rowIndex, modCode, col)}" />
</p:column>
</c:forEach>
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
对于这个视图,我有4种形式的数据:Added,Deleted,Modified和All,这是一个聚合的A / D / M视图。这应该是这样的方式是在添加和删除视图中只显示一个简单的dataTable,没有行扩展或rowToggler。在“修改”和“所有”视图中,rowToggler和扩展应该可用于以两行(原始与修改)显示已修改的内容。这个“看起来”工作非常好,唯一需要注意的是操作顺序。
如果我首先查看All或Modified内容,没问题,但是一旦我查看添加或删除的内容,rowToggler和rowExpansion就会被删除(因为它们应该是),但是它们将永远消失。基于我对渲染的理解(通过DOM中已有的组件),这应该没有缺陷......我还将记录信息放入toggleRowRendered和rowExpansionRendered方法(除了实际调试之外)以在切换回来时验证我的结果全部或修改。
DEBUG [http-apr-8080-exec-94] - Toggle column rendering: true
19:38:53,222 DEBUG [Difference:352:isRowExpansionRendered]
DEBUG [http-apr-8080-exec-94] - Toggle row expansion rendering: true
19:38:53,223 DEBUG [Difference:347:isToggleRowRendered]
另外,p:commandButton update中的differenceContent是dataTable的父面板。它也应该有助于渲染。