2

使用しようとしています<p:columns>が、囲んでいるオブジェクトのプロパティであるa をフィードすると、何もレンダリングされません。 List<p:dataTable>

そのリストを正常に使用したり、 using<ui:repeat>内のエントリの 1 つにアクセスしたりできます。バッキング Bean のプロパティにリストを割り当てるとき。しかし、オブジェクトのプロパティを使用すると、その場所には何もレンダリングされません。エラーメッセージ等はありません。 <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>

バッキング Bean:

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 ショーケースを見れば、それを見つけることができます。

ただし、 を使用して同じ列にある車の機能をループするui:repeatことができるため、すべての機能を 1 つの列に含めることができます。

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