2012-04-18 44 views
0

我對JSF並不陌生。我有一個關於數據表和事件處理的問題。這是我想要做的場景。 我有數據表優先級,ID,地址,電話號碼和支持豆是Person.I必須根據3個值Critical,Warning,Low排序Priority列。我使用比較器的東西對優先級列進行了排序。它的工作正常。 現在,我面臨的挑戰是記錄在託管bean中排序後,我想用更新後的排序結果填充數據表。記錄是ArrayList。單擊標題部分中的commandLink之後可重新加載數據表

<p:column> 
       <f:facet name="header" > 
        <h:commandLink action="#{personManagedBean.sortByPriority}"> 
         Pririty 
        </h:commandLink> 
       </f:facet> 
       #{person.priority} 
</p:column> 

在Managed Bean,

public class PersonManagedBean{ 

private ArrayList<Person> personList; 

//getters and setters for personList. 

public String sortByPriority(){ 
    Collections.sort(personList, new PersonComparator()); 
    return null; 
} 
} 

一旦Collections.sort行執行,我想與排序personList記錄來填充數據表。

你們能幫我嗎?

謝謝。

+0

給出的代碼應該已經做到這一點,除非你不正確地從getter方法而不是(post)構造函數中從數據庫中檢索數據。 – BalusC 2012-04-19 11:55:31

回答

0

雖然我覺得你還是可以通過添加<f:ajax render="@form"/>到您的<h:commandLink

這樣

<h:commandLink action="#{personManagedBean.sortByPriority}"> 
    <f:ajax render="@form"/> 
    Priority 
    </h:commandLink> 

你最好使用sortBy和P的sortFunction修改現有的代碼工作過:列

這應該是這樣的樣子(注意<h:outputText value="的附加使用,它比簡單的文字更好)

<p:column sortBy="#{person.priority}" sortFunction="#{personManagedBean.sortByPriority}"> 
    <f:facet name="header" > 
     <h:outputText value="Priority"> 
    </f:facet> 
     <h:outputText value="#{person.priority}"/> 
</p:column> 

,這是怎樣的sortByPriority應該像(或多或少)

public int sortByPriority(Object Obj1, Object Obj2) { 

    if (Obj1 != null && Obj2 != null) { 

     //turn the Objects into Strings or some other objects 

     return newObj1.compareTo(newObj2); 

    } else { 
     return 0; 
    } 
} 

看看陳列櫃例如DataTable - Sorting

+0

謝謝丹尼爾的解決方案 – greenworld2012 2012-05-02 21:28:28

+0

@ greenworld2012歡迎您,如果它解決了您的問題,您應該接受答案,請閱讀這裏how:http://meta.stackexchange.com/a/5235 – Daniel 2012-05-03 06:32:50

相關問題