如何在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】:

你的错误是你引用了当前迭代的行(&lt;p:dataTable var&gt;后面的对象为&lt;p:columns value&gt;。这是不可能的。列的数量不能根据当前迭代的行而变化。只能设置表-宽。&lt;p:columns value&gt; 应该引用支持 bean 中的属性。对于真实世界的示例,另请参阅此答案:Creating and populating a DataTable dynamically in JSF2.0。

在您的特定情况下,您基本上只想使用&lt;ui:repeat&gt; inside &lt;p:column&gt;:

<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之后打印&lt;br/&gt;;或者如果你想用逗号分隔打印,使用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 相同的错误:在 &lt;p:columns value&gt; 中引用当前迭代的项目。这永远行不通。 哎哟!我写了report.columns,但我的意思是tableBean.columns(columns 是bean 中的一个列表)。我会编辑它,但无论如何你的答案是正确的,因为如果每个 Report 对象的收入数量不定,这个答案就不起作用......(你必须选择显示哪一个......)

以上是关于如何在primefaces数据表中显示可变数量的列的主要内容,如果未能解决你的问题,请参考以下文章

如何在Primeface的列中删除PrimeFaces dataList的边框?

是否可以在T-SQL中将行转换为可变数量的列?

如何根据输入在 R 中显示可变数量的 ggplots?

如何将 primeface 列包含到组合中

如何使值的外键显示在primefaces数据表中

有没有办法在红移中使用 CONCAT(table_name(col1, col2, col3,.....)) 连接可变数量的列?