Jsf 如何更改<;p:dataTable>;基于<;p:selectOneButton>;?

Jsf 如何更改<;p:dataTable>;基于<;p:selectOneButton>;?,jsf,primefaces,Jsf,Primefaces,我有3个不同类型的数据列表,我想根据按下的按钮将它们显示在一个中,如下所示: 如果用户单击“按钮1”,我想在 如果用户单击“按钮2”,我想在 以下是观点: <p:selectOneButton value="#{managedBean.perspective}"> <f:selectItem itemLabel="Button 1" itemValue="1" /> <f:selectItem itemLabel="Button 2" itemV

我有3个不同类型的数据列表,我想根据按下的按钮将它们显示在一个
中,如下所示:

  • 如果用户单击“按钮1”,我想在
  • 如果用户单击“按钮2”,我想在
以下是观点:

<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>();
private List list1=new ArrayList();
private List list2=新的ArrayList();
private List list3=新的ArrayList();

如何将相同的
重新用于不同的对象列表?

p:selectOneButton
添加值更改侦听器:

   <f:ajax update="table" />

侦听器示例:

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


p添加valueChangeListener:selectOneButton

   <f:ajax update="table" />

侦听器示例:

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

您需要有一个对象属性的集合,以便可以使用它动态生成列

例如


#{对象[属性]}

private static final List OBJECT1_PROPERTIES=Arrays.asList(“property1”、“property2”、“property3”);
私有静态最终列表OBJECT2_PROPERTIES=Arrays.asList(“foo”、“bar”);
私有静态最终列表OBJECT3_PROPERTIES=Arrays.asList(“p1”、“p2”、“p3”、“p4”、“p5”);
private List list1=new ArrayList();
private List list2=新的ArrayList();
private List list3=新的ArrayList();
私有字符串类型;
私人名单;
私有财产清单;
公共空间更改(){
如果(“1”。等于(类型)){
列表=列表1;
属性=对象1_属性;
}
// ...
}

您需要有一个对象属性的集合,以便可以使用它动态生成列

例如


#{对象[属性]}

private static final List OBJECT1_PROPERTIES=Arrays.asList(“property1”、“property2”、“property3”);
私有静态最终列表OBJECT2_PROPERTIES=Arrays.asList(“foo”、“bar”);
私有静态最终列表OBJECT3_PROPERTIES=Arrays.asList(“p1”、“p2”、“p3”、“p4”、“p5”);
private List list1=new ArrayList();
private List list2=新的ArrayList();
private List list3=新的ArrayList();
私有字符串类型;
私人名单;
私有财产清单;
公共空间更改(){
如果(“1”。等于(类型)){
列表=列表1;
属性=对象1_属性;
}
// ...
}

你的问题很不清楚..我复习了一些英语。我想这就是你最终要问的,对吗?非常感谢你,我的朋友!抱歉给您带来的不便我的英语很差:[您的问题很不清楚。.我整理了一些英语。我想这就是您最终要问的问题,对吗?非常感谢您,我的朋友!抱歉给您带来的不便我的英语很差:[问题是“列表”是不同的签名(类型)列表,列表…因此您可以创建类型为
Object
的列表,或者为
Objet1
Objet2
Objet
3创建公共接口。问题是“列表”是不同的签名(类型)列表,列表…这样你就可以列出类型
Object
或者为
Objet1
Objet2
Objet
3创建公共接口谢谢!我认为这是解决我问题的理想方案。我会测试它!谢谢!我认为这是解决我问题的理想方案。我会测试它!