根据参数在p:dataTable中排序特定列

时间:2013-08-22 09:42:00

标签: jsf primefaces datacolumn

我必须在Student中显示来自<p:dataTable>表的数据,如下所示:

<p:dataTable
    value="#{school.getStudent(GENDER)}"
    var="student" />
    ......all <p:columns>
</p:dataTable>

在此,school.getStudent(MALE)将返回所有男生的列表,school.getStudent(FEMALE)将返回所有女生的列表。

现在我面临的问题是订购数据。 要求是:

  • 如果是MALE,请根据ID
  • 订购
  • 如果是FEMALE,请根据NAME
  • 订购

IDNAMEStudent表的列。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

在你的支持bean中做。在返回之前对要显示的Collection进行排序。 Primefaces将按照Collection提供条目的顺序显示表中的条目。因此,请使用ArrayList保留订单,并使用比较器和Collections.sort(...)对列表进行排序。

可能看起来像这样:

public List<Student> getStudent(Gender gender) {
    Comparator<Student> comparator;
    if (gender == Gender.MALE) {
        comparator = new MaleStudentComparator();
    }
    else {
        comparator = new FemaleStudentComparator();
    }

    return Collections.sort(studentList, comparator);
}

答案 1 :(得分:0)

  <p:column sortBy=#{bean.gender ? widgetVar.Name : widgetVar.id}>

假设bean.gender是一个布尔值,在女性的情况下返回“True”,在“Male”的情况下返回“False”。