與原生<h:dataTable>
你必須在你的託管bean中進行排序。你可以使用現有的擁有它們建立在這樣的JSF擴展庫:
- MyFaces的戰斧 - docs
- ICEfaces的 - docs
- RichFaces的 - docs
- PrimeFaces - docs
- 等方式太許多人說。
但是,如果您不想使用上述工具包,那麼在託管bean中,您可以定義List和排序順序(asc或dec)。它可以像你想要的那樣簡單或複雜。
的Ordering
庫更改爲SortOrder
庫中,參照此庫:import org.richfaces.component.SortOrder;
排序順序比較器可以以可變的編程方式使用<rich:column>
屬性來定義:
private SortOrder sorting = SortOrder.unsorted;
This is an example of using SortOrder programmatically using JSF 2.x/RichFaces 4.x。它使用三態排序方法:未排序(默認),升序和降序,並通過設置sortOrder屬性來實現。
或比較默認行爲可以在代碼重寫,因爲在這個例子中:
@ManagedBean(name="somebean")
@SessionScoped
public class OrderBean implements Serializable {
private static final long serialVersionUID = ....;
private List<Item> items;
private boolean sortAscending;
...
}
在你看來,你定義你想排序哪個標題,所以加一個commandLink使每頭點擊。
<h:dataTable value="#{somebean.items}" var="i">
<h:column>
<f:facet name="header">
<h:commandLink action="#{somebean.sort}"> Sort Column</h:commandLink>
</f:facet>
#{i.name}
</h:column>
</h:dataTable>
現在你必須實現排序爲bean基本集合,再次,它可以作爲複雜的,你可以:
private final Comparator NAME_SORT_ASC = new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
return o1.getName().compareTo(o2.getName());
}
}
};
private final Comparator NAME_SORT_DESC = new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
return o2.getName().compareTo(o1.getName());
}
}
};
public String sort() {
Collections.sort(items, sortAscending ? NAME_SORT_ASC : NAME_SORT_DESC);
}
你可以讓你的生活更輕鬆通過重用的東西,而不是爲每個專欄做這件事,我會讓你弄清楚。您可以使用更好的Java庫來幫助您完成比較,例如Google的Guava或Apache的Collection Commons。
而不是做這一切,重新發明輪子的,使用一個框架,抽象出這一切對你來說,他們會讓你的生活更輕鬆的方式..
你想在客戶端(瀏覽器)或服務器端進行排序嗎? – edze 2012-04-02 08:08:16