2012-09-27 46 views
1

我有不同類型的3個數據表,我想在一個<p:dataTable>來顯示它們取決於所按這樣的<p:selectOneButton>如何根據<p:selectOneButton>動態地更改<p:dataTable>的值?

  • 如果用戶點擊「按鈕1」,我想顯示list1<p:dataTable>
  • 如果用戶點擊 「按鈕2」,我想在<p:dataTable>

這裏顯示list2的觀點:

<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>

+0

你的問題是非常不清楚.. – Nerrve

+0

我清理了一些Engrish。我想這就是你最終要問的問題,對吧? – BalusC

+0

非常感謝我的朋友! 敬請原諒 我的英語那麼差: –

回答

1

你需要有對象的屬性集合以便您可以使用<p:columns>動態生成列。

E.g.

<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; 
    } 
    // ... 
} 
+0

謝謝!我認爲這是我的問題的理想解決方案。 我會測試它! –

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" /> 
+0

的問題是,「名單」是不同的簽名(類型)列表,列表 ... –

+0

這樣可以使類列表'Object'或創建'Objet1','Objet2','Objet'3 – tomi

+0

的通用界面我該怎麼做? –

相關問題