プライムフェイスのデータグリッドデータをソートすることは可能ですか? データテーブルで可能であることは承知しています。デフォルトで不可能な場合、他に方法はありますか? ありがとう
質問する
2709 次
1 に答える
4
Primefaces datagrid はソートもフィルタリングも提供しておらず、すぐに実装する予定はないようです。
「Date」、「Price (highest first)」、「Price (lowest first)」などの並べ替えオプションを使用して、データグリッドのすぐ上にある ap:selectOneMenu を使用して、データグリッドに並べ替えを実装しました。選択した値が変更されたら、使用します適切な ORDER BY を使用してデータベースからコレクションをリロードするメソッドを呼び出す ajax イベント。
例:
<h:form>
<h:outputLabel value="Sort by: " />
<p:selectOneMenu value="#{bean.selectedField}" >
<f:selectItems value="#{bean.sortingFields}" />
<p:ajax event="change" update="grid" />
</p:selectOneMenu>
<p:dataGrid id="grid" value="#{bean.collection}" var="item" >
<!-- contents of datagrid here -->
</p:dataGrid>
</h:form>
マネージド Bean では次のようになります。
private List<SelectItem> sortingFieds;
private String selectedField, currentSortField;
private boolean asc;
private List<YourEntity> collection;
@EJB private YourEJB yourEjb;
public void init() {
// load sortingFields with list of fields to order by
// set default value for currentSortField
asc = true;
collection = yourEjb.loadCollection(sortField, asc);
}
public void sortCollection() {
if(currentSortField.equals(selectedField) {
asc = !asc;
} else {
currentSortField = selectedField;
asc = true;
}
collection = yourEjb.loadCollection(sortField, asc);
}
そしてあなたのejbで
public List<YourEntity> loadCollection(String sortfield, boolean asc) {
String q = "SELECT e FROM YourEntity e ORDER BY " + sortfield + " ";
if(asc) {
q += "ASC";
} else {
q += "DESC";
}
Query query = entityManager.createQuery(q);
return query.getResultList();
}
于 2012-07-11T12:22:15.543 に答える