2

我正在尝试使用<p:columns>,但是当我将它提供给它时​​,它什么也没有呈现,它是封闭正在迭代 List的对象的属性。<p:dataTable>

我可以在using中成功使用该列表<ui:repeat>或访问其中的一个条目。当将列表分配给支持 bean 的属性时。但是当使用-object的属性时,该位置不会呈现任何内容。没有错误信息等。 <p:dataTable><p:column><p:columns>
Car

Primefaces 4.0 用户指南Dynamic Columns中的部分让我感到困惑,因为使用了代码示例,但仍然有一个值,而不是- 我不知道应该如何使用它。cars[colIndex]<p:columns>cars

附加信息:
我需要列列表<p:columns>才能成为该类的一部分,因为我想为具有不同属性的多个类重用代码,因此需要不同的列。

Facelets 代码:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<h:head></h:head>
<h:messages />
<h:form>
    <!-- works -->
    <ui:repeat value="#{carBean.cars}" var="car">
        ui:repeat: #{car.features}
    </ui:repeat>

    <p:dataTable value="#{carBean.cars}" var="car">

       <!-- works too -->
       <p:column>
           p:column: #{car.features.get(0)}
       </p:column>

       <!-- works too -->
       <p:columns value="#{carBean.beanFeatures}" var="feature" columnIndexVar="colIndex">  
            carBean p:columns: #{feature}
       </p:columns>

       <!-- renders nothing -->
       <p:columns value="#{car.features}" var="feature" columnIndexVar="colIndex">  
            car p:columns: #{feature}
       </p:columns>

    </p:dataTable>

</h:form>
</html>

后备豆:

package myPackage;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class CarBean implements Serializable {

    List<Car> cars;
    List<String> beanFeatures;

    @PostConstruct
    public void init(){
        cars = new ArrayList<Car>();
        Car car1 = new Car();
        car1.features.add("windows");
        car1.features.add("fridge");
        Car car2 = new Car();
        car2.features.add("wheels");
        car2.features.add("nuclear engine");
        cars.add(car1);
        cars.add(car2);
        beanFeatures = car1.getFeatures();
    }

    public List<Car> getCars() {
        return cars;
    }

    public void setCars(List<Car> cars) {
        this.cars = cars;
    }

    public List<String> getBeanFeatures() {
        return beanFeatures;
    }

    public void setBeanFeatures(List<String> beanFeatures) {
        this.beanFeatures = beanFeatures;
    }

}

Car班级_

package myPackage;

import java.util.ArrayList;
import java.util.List;


public class Car {

    List<String> features = new ArrayList<String>();

    public List<String> getFeatures() {
        return features;
    }

    public void setFeatures(List<String> features) {
        this.features = features;
    }

}
4

1 回答 1

1

这基本上不是 Primefaces 动态列的工作方式。您的动态列必须直接绑定到托管 Bean 的属性。没有选择为每次汽车迭代动态地稳定该值。

因此,简而言之,不同的表值不可能有不同的列。表格列可以动态呈现,但这必须在 PrimeFaces 开始循环遍历这些值之前决定。

如果您查看Primefaces 展示柜,您会发现。

但是,可以使用 a 在同一列中循环 car 的特征ui:repeat,因此您可以将其所有特征放在一个列中:

<p:column>  
    <ui:repeat value="#{car.features}" var="feature">
        #{feature}
    </ui:repeat>
</p:column>
于 2013-10-24T11:08:42.077 回答