2

以下代码循环遍历数据库中的列表并为每个条目构建一个数据表。每个条目都有一个列列表,这些列将显示在数据表中。我遇到的问题是复合代码中 p:columns 的 value 属性在第二次调用复合时没有被更改。它似乎缓存了列的初始列表。有没有办法重置列标签,以便它使用新的列列表。

UPDATE似乎第二个数据表正在使用以前的数据表行值名称作为第一个单元格的第一行。其他一切都很好。这是一个屏幕截图

第二次更新我还注意到,如果您转到第二个数据表的第二页,然后返回第一页,图像中圈出的损坏的单元格会用正确的值修复它自己。

第三次更新在下面的代码中,我使用了 ui:repeat 标签。我还使用了 primeface:accordian 标签,它们都产生了问题。我用 ac:forEach 标签更改了 ui:repeat 标签,并解决了下图中的问题。我仍然遇到的问题是我需要将它放在 primefaces 手风琴标签中,以便我可以为每个数据表动态构建一个选项卡。我以为我的问题出在数据表的 p:columns 标记中,但现在似乎出在 ui:reat 或 p:accordian 标记中,它们都使用 value="#{myBeanList}" 属性

在此处输入图像描述

 <ui:repeat var="codetable" value="#{pc_Maintenence.codeMaintenenceTables}">
        <util:maintenence_code pageBean="#{pc_Maintenence}" dataTableInfo="#{codetable}"
                paginator="true" rows="10"/>
    </ui:repeat>

这是上面代码 util:maintence_code 中调用的复合代码。

    <composite:interface>
        <composite:attribute name="pageBean" required="true" />
        <composite:attribute name="dataTableInfo" required="true" />
        <composite:attribute name="paginator" type="java.lang.Boolean" />
        <composite:attribute name="rows" />
    </composite:interface>

    <composite:implementation>

        <p:panel id="pnl_doc_code_table">
           <p:dataTable value=#{cc.attrs.pageBean.getDataTableList(cc.attrs.dataTableInfo.tableListName)}"
                var="tblVar" paginator="#{cc.attrs.paginator}"
                rows="#{cc.attrs.rows}" dynamic="true" cache="false">

                 <p:columns var="column" styleClass="columns" id="columns" value="#{cc.attrs.dataTableInfo.columns}">

                       #{tblVar[column.name]}

                  </p:columns>
              </p:dataTable>
           </p:panel>
   </composite:implementation>
4

1 回答 1

0

我已经解决了这个问题。问题似乎出在您创建使用 primefaces:columns 标记的动态 primefaces:datatables 时。当数据表在 ui:repeat 标记内或使用 primefaces:accordianPanel 的循环能力创建时,在第一个数据表之后创建的每个数据表在第一行的第一个单元格中都有错误的值。数据表中的所有其他单元格都具有正确的值。我还注意到 headerText 是错误的,并且总是来自以前的数据表 headerText (第一个数据表的 headerText 总是正确的)。

为了解决这个问题,我将 jstl:forEach 标记放在 primefaces:accordianPanel 标记内。这解决了这个问题。ui:repeat 和/或 primefaces:accordianPanel 如何呈现数据表似乎是一个问题。这是正常工作的代码。

<h:form styleClass="form" id="frmcodes">
        <p:tabView styleClass="tabView" id="tabview_maintenence" rendered="#{user.khecorpAdmin}">
            <p:tab id="tab_code_tables" title="Code Tables">
                <p:accordionPanel id="pnl_accord_codetables">
                   <c:forEach items="#{pc_Maintenence.codeMaintenenceTables}" var="codetable">
                       <p:tab title="#{codetable.tableName}">                   
                           <util:maintenence_code pageBean="#{pc_Maintenence}" dataTableTemplate="#{codetable}"/>
                       </p:tab>
                    </c:forEach>
                </p:accordionPanel>
             </p:tab>
          </p:tabView>
          <p:messages id="msg" autoUpdate="true"/>
    </h:form>

这是构建数据表的复合代码

<composite:interface>
        <composite:attribute name="pageBean" required="true"/>
        <composite:attribute name="dataTableTemplate" required="true" />
    </composite:interface>

    <composite:implementation>
        <p:panel id="pnl_table">

            <p:dataTable value="#{cc.attrs.pageBean.getDataTableList(cc.attrs.dataTableTemplate.tableListName)}"
                var="tblVar" paginator="true" rows="10" rowIndexVar="tblIndx"
                editable="#{cc.attrs.dataTableTemplate.editable}">

                <p:columns id="columns" value="#{cc.attrs.dataTableTemplate.columns}" 
                    var="column" headerText="#{column.heading}">

                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{tblVar[column.name]}"/>
                        </f:facet>

                        <f:facet name="input" rendered="#{column.editable}">
                            <p:inputText value="#{tblVar[column.name]}" rendered="#{column.editable}"/>
                        </f:facet>
                    </p:cellEditor>
                </p:columns>
                <p:column rendered="#{cc.attrs.dataTableTemplate.editable}">  
                    <p:rowEditor /> 
                </p:column>
            </p:dataTable>
        </p:panel>
    </composite:implementation>
于 2013-06-07T15:49:44.983 回答