以下代码循环遍历数据库中的列表并为每个条目构建一个数据表。每个条目都有一个列列表,这些列将显示在数据表中。我遇到的问题是复合代码中 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>