1

異なるタイプの 3 つのデータ リストがあり、次のように押さ<p:dataTable>れた内容に応じて1 つのリストに表示したいと考えています。<p:selectOneButton>

  • list1ユーザーが「ボタン1」をクリックした場合、表示したい<p:dataTable>
  • list2ユーザーが「ボタン2」をクリックした場合、表示したい<p:dataTable>

ビューは次のとおりです。

<p:selectOneButton value="#{managedBean.perspective}">
    <f:selectItem itemLabel="Button 1" itemValue="1" />
    <f:selectItem itemLabel="Button 2" itemValue="2" />
    <f:selectItem itemLabel="Button 3" itemValue="3" />
    <f:ajax event="change" render="table" />
</p:selectOneButton>

<p:dataTable id="table" value="#{managedBean.list}" var="object">
    <p:column headerText="title">
        ...
    </p:column>
</p:dataTable>

モデルは次のとおりです。

private List<Object1> list1 = new ArrayList<Object1>();
private List<Object2> list2 = new ArrayList<Object2>();
private List<Object3> list3 = new ArrayList<Object3>();

<p:dataTable>オブジェクトの異なるリストに同じものを再利用するにはどうすればよいですか?

4

2 に答える 2

1

<p:columns>列を動的に生成するために使用できるように、オブジェクトのプロパティのコレクションが必要です。

例えば

<p:selectOneButton value="#{bean.type}">
    <f:selectItem itemLabel="Button 1" itemValue="1" />
    <f:selectItem itemLabel="Button 2" itemValue="2" />
    <f:selectItem itemLabel="Button 3" itemValue="3" />
    <p:ajax listener="#{bean.change}" update="table" />
</p:selectOneButton>

<p:dataTable id="table" value="#{bean.list}" var="object">
    <p:columns value="#{bean.properties}" var="property">
        #{object[property]}
    </p:columns>
</p:dataTable>

private static final List<String> OBJECT1_PROPERTIES = Arrays.asList("property1", "property2", "property3");
private static final List<String> OBJECT2_PROPERTIES = Arrays.asList("foo", "bar");
private static final List<String> OBJECT3_PROPERTIES = Arrays.asList("p1", "p2", "p3", "p4", "p5");

private List<Object1> list1 = new ArrayList<Object1>();
private List<Object2> list2 = new ArrayList<Object2>();
private List<Object3> list3 = new ArrayList<Object3>();

private String type;
private List<?> list;
private List<String> properties;

public void change() {
    if ("1".equals(type)) {
        list = list1;
        properties = OBJECT1_PROPERTIES;
    }
    // ...
}
于 2012-09-28T11:35:50.603 に答える
0

の valueChangeListener を追加しp:selectOneButtonます。

リスナーの例:

public void yourListener(ValueChangeEvent event) {
    String newValue = (String) event.getNewValue();

    if ("1".equals(newValue){
        list = list1;
    } else if ("2".equals(newValue){
        list = list2;
    }else if ("3".equals(newValue){
        list = list3;
    }
}

と設定p:selectOneButton

   <f:ajax update="table" />
于 2012-09-28T09:52:20.420 に答える