是否可以对primefaces datagrid数据进行排序?因为我知道它可以在数据表中。如果默认情况下不可能,有没有其他方法可以做到这一点?感谢
答案 0 :(得分:4)
Primefaces datagrid不提供排序或过滤,似乎没有计划很快实施它。
我在数据网格中使用ap:selectOneMenu在数据网格中实现了排序,其中包括“Date”,“Price(最高优先)”,“价格(最低优先)”等排序选项。当选择的值发生变化时,我使用一个ajax事件,用于调用使用适当的ORDER BY从数据库重新加载集合的方法。
示例:
<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();
}