如何在primefaces数据表中显示可变数量的列
Posted
技术标签:
【中文标题】如何在primefaces数据表中显示可变数量的列【英文标题】:How to display variable number of columns in primefaces datatable 【发布时间】:2013-09-22 22:11:07 【问题描述】:我有以下 ArrayList
class Report
private String manufacturer;
private String color;
private List<Double> revenue;
如何在 primefaces 数据表上显示它。我尝试使用 p:columns 它不起作用。 我在 Xhtml 页面上有以下代码
<p:dataTable value="#tableBean.reportList" var="report" id="table">
<p:column headerText="Manufacturer">#report.manufacturer</p:column>
<p:column headerText="Color">#report.color</p:column>
</p:dataTable >
我还尝试了 p:columns 和 ui:repeat。但我无法达到预期的输出。结果。
<p:columns var="amount" value="#report.revenue">#amount</p:columns>
<ui:repeat var="amount" value="#report.revenue">
<p:column headerText="Revenue">#amount</p:column>
</ui:repeat>
我需要以表格形式输出制造商名称、颜色和所有收入
【问题讨论】:
检查 Primefaces Showcase. 【参考方案1】:你的错误是你引用了当前迭代的行(<p:dataTable var>
后面的对象为<p:columns value>
。这是不可能的。列的数量不能根据当前迭代的行而变化。只能设置表-宽。<p:columns value>
应该引用支持 bean 中的属性。对于真实世界的示例,另请参阅此答案:Creating and populating a DataTable dynamically in JSF2.0。
在您的特定情况下,您基本上只想使用<ui:repeat>
inside <p:column>
:
<p:dataTable value="#tableBean.reportList" var="report">
<p:column>
#report.manufacturer
</p:column>
<p:column>
#report.color
</p:column>
<p:column>
<ui:repeat value="#report.revenue" var="revenue">#revenue</ui:repeat>
</p:column>
</p:dataTable>
(如果你想分行打印,在#revenue
之后打印<br/>
;或者如果你想用逗号分隔打印,使用varStatus
)
或者可能是一个嵌套表:
<p:column>
<h:dataTable value="#report.revenue" var="revenue">#revenue</h:dataTable>
</p:column>
【讨论】:
【参考方案2】:试试
<p:column headerText="Manufacturer">#report.manufacturer</p:column>
<p:column headerText="Color">#report.color</p:column>
<p:columns value="#tableBean.columns" var="column">
<f:facet name="header">
#column.header
</f:facet>
#report.revenue.get(column.property)
</p:columns>
您的 bean 列中的位置是:
List<ColumnModel> columns;
static public class ColumnModel implements Serializable
private String header;
private int property;
public ColumnModel(String header, int property)
this.header = header;
this.property = property;
public String getHeader()
return header;
public int getProperty()
return property;
填写如下:
for(int i = 0; i < TOTAL_NUMBER_OF_REVENUES; i++)
ColumnModel col = new ColumnModel("Revenue "+i, i);
columns.add(col);
来源:http://www.primefaces.org/showcase/ui/datatableDynamicColumns.jsf
【讨论】:
您仍然在犯与 OP 相同的错误:在<p:columns value>
中引用当前迭代的项目。这永远行不通。
哎哟!我写了report.columns,但我的意思是tableBean.columns(columns 是bean 中的一个列表)。我会编辑它,但无论如何你的答案是正确的,因为如果每个 Report 对象的收入数量不定,这个答案就不起作用......(你必须选择显示哪一个......)以上是关于如何在primefaces数据表中显示可变数量的列的主要内容,如果未能解决你的问题,请参考以下文章
如何在Primeface的列中删除PrimeFaces dataList的边框?
有没有办法在红移中使用 CONCAT(table_name(col1, col2, col3,.....)) 连接可变数量的列?