【问题标题】:How to display variable number of columns in primefaces datatable如何在primefaces数据表中显示可变数量的列
【发布时间】: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>

我需要以表格形式输出制造商名称、颜色和所有收入

【问题讨论】:

标签: jsf jsf-2 primefaces datatable


【解决方案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 对象的收入数量不定,这个答案就不起作用......(你必须选择显示哪一个......)
    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多