呈现的Primefaces p:rowExpansion / p:column

时间:2015-06-03 19:51:16

标签: jsf primefaces

我有一个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的父面板。它也应该有助于渲染。

0 个答案:

没有答案