我正在使用一个primefaces来显示一组动态列,如下所示:
<p:dataTable value="#{queryResults}" var="row" style="margin-top:15px;">
<p:columns value="#{row.cells}" var="cell" headerText="#{cell.field.label}" rendered="#{not cell.field.hidden}">
<h:outputText value="#{cell.value}" />
</p:columns>
</p:dataTable>
我的环境是Majorra 2.0.3,PF 3.5,tomcat 7上的Spring Webflow 2.3
当我点击我的命令按钮时,我会得到一个部分响应,但表中没有单元格:
<div id="alertForm:j_idt58" class="ui-datatable ui-widget" style="margin-top:15px;">
<table role="grid"><thead><tr role="row"></tr></thead><tfoot></tfoot>
<tbody id="alertForm:j_idt58_data" class="ui-datatable-data ui-widget-content">
<tr data-ri="0" class="ui-widget-content ui-datatable-even" role="row"></tr>
<tr data-ri="1" class="ui-widget-content ui-datatable-odd" role="row"></tr>
<tr data-ri="2" class="ui-widget-content ui-datatable-even" role="row"></tr>
<tr data-ri="3" class="ui-widget-content ui-datatable-odd" role="row"></tr>
</tbody></table></div>
即使调用了java代码,也会按预期返回行。我第二次点击按钮,调用相同的java代码,但部分响应包含数据表及其单元格,因此它显示正确...
我想念什么?
注意:结合使用datatable +几列,一切正常......
答案 0 :(得分:0)
尝试将<p:datatable>
放在单独的<h:form>
中,以便为我解决问题。
答案 1 :(得分:0)
解决方案是:以下内容:(阅读手册)p:columns仅用于显示标题和创建索引变量(columnIndexVar),允许您以“旧式”索引方式访问数据。
曼努埃尔说:
动态列 动态列非常方便,以防您无法知道要渲染的列数。列组件用于以编程方式定义列。它需要一个集合作为值,两个迭代器变量名为var和columnIndexVar。
<p:dataTable var="cars" value="#{tableBean.dynamicCars}" id="carsTable">
<p:columns value="#{tableBean.columns}" var="column" columnIndexVar="colIndex">
<f:facet name="header">
<h:outputText value="#{column}"/>
</f:facet>
<h:outputText value="#{cars[colIndex].model}" /> <br />
<h:outputText value="#{cars[colIndex].year}" /> <br />
<h:outputText value="#{cars[colIndex].color}"/>
</p:columns>
</p:dataTable>