2013-08-22 54 views
0

我必須表明在<p:dataTable>看起來像如下從Student表中的數據:訂購特定列內號碼:dataTable的基礎上論證

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

這裏,school.getStudent(MALE)將返回所有的男學生和school.getStudent(FEMALE)名單將返回所有女學生的名單。

現在我面臨的問題是訂購數據。 的要求是:

  • 如果是基於ID
  • MALE,訂單如果是FEMALE,爲了基於NAME

IDNAMEStudent表的列。

我該如何做到這一點?

+0

錯誤的問題。你應該在SQL(JPA/JDBC)中完成,而不是在JSF中完成。因此,您需要重新構建您的問題以刪除所有不相關的JSF噪聲,並在getStudent()後面顯示數據庫交互代碼。 – BalusC

+0

我同意你的看法,我們應該刪除所有的JSF噪聲,但爲什麼我不能創建一個比較器來比較兩個基於不同參數的Student對象?比較器將是實體內部的靜態內部類,我將使用Collections.sort(List,)調用這些比較器;從我的豆。 –

回答

3

在您的支持bean中執行此操作。在返回之前對您要顯示的Collection進行排序。 Primefaces將按照集合提供條目的順序顯示錶中的條目。因此請使用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); 
} 
+0

我正在按照您的方法進行操作,並且數據正確顯示。我寫了兩個比較器。比較器是我的實體內部的靜態內部類,我用Collections.sort(List,)調用它們;從我的豆。 –

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

讓我們假設bean.gender是在的情況下,返回「True」一個布爾值,女性和「假」,在「男性」的情況。