繁体   English   中英

JSF Primefaces数据表,当使用Columns标记时,第一行的第一单元格正在使用先前的数据表值

[英]JSF Primefaces datatable, first cell of first row is using previous datatable value when Columns tag is used

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

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:maintenence_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>

我已经解决了问题。 问题似乎是当您创建使用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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM