2012-07-11 75 views

回答

4

Primefaces datagrid不提供排序和筛选功能,似乎没有计划在不久的将来实现它。
我已经实现了在数据网格上使用ap:selectOneMenu在数据网格上方排序,并使用诸如“日期”,“价格(最高优先)”,“价格(最低优先)”等排序选项对数据网格进行排序。我使用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(); 
} 
+0

@BernadAli如果这不是对你不够清楚,我可以添加一些代码。 – Damian 2012-07-11 12:22:40

+0

感谢Damian对你的建议。请给出一个例子吗?这会有帮助 – 2012-07-11 15:28:36

+0

@BernadAli添加示例 – Damian 2012-07-15 19:06:55

相关问题