Sorting 可以对primefaces数据网格进行排序吗?

Sorting 可以对primefaces数据网格进行排序吗?,sorting,datagrid,primefaces,Sorting,Datagrid,Primefaces,是否可以对数据网格数据进行排序?据我所知,这在数据表中是可能的。如果默认情况下不可能,还有其他方法吗?感谢Primefaces datagrid不提供排序和筛选,而且似乎短期内没有实施它的计划。 我已经在datagrid中使用p:SelectOne菜单实现了排序,该菜单位于datagrid的正上方,带有排序选项,如“日期”、“价格(最高优先)”、“价格(最低优先)”等。当所选值更改时,我使用ajax事件调用一个方法,该方法使用适当的ORDER BY从数据库重新加载集合 例如: <h:for

是否可以对数据网格数据进行排序?据我所知,这在数据表中是可能的。如果默认情况下不可能,还有其他方法吗?感谢

Primefaces datagrid不提供排序和筛选,而且似乎短期内没有实施它的计划。
我已经在datagrid中使用p:SelectOne菜单实现了排序,该菜单位于datagrid的正上方,带有排序选项,如“日期”、“价格(最高优先)”、“价格(最低优先)”等。当所选值更改时,我使用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);
}
私有列表排序域;
私有字符串selectedField,currentSortField;
私有布尔asc;
私人名单收集;
@EJB私有yourejbyourejb;
公共void init(){
//加载排序字段和要排序的字段列表
//设置currentSortField的默认值
asc=真;
collection=yourEjb.loadCollection(sortField,asc);
}
公开作废sortCollection(){
如果(currentSortField.equals)(selectedField){
asc=!asc;
}否则{
currentSortField=selectedField;
asc=真;
}
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();
}
公共列表loadCollection(字符串sortfield,布尔asc){
String q=“通过“+sortfield+”从实体e中选择e”;
如果(asc){
q+=“ASC”;
}否则{
q+=“描述”;
}
Query Query=entityManager.createQuery(q);
返回query.getResultList();
}

Primefaces datagrid不提供排序和筛选,似乎短期内没有实施该功能的计划。
我已经在datagrid中使用p:SelectOne菜单实现了排序,该菜单位于datagrid的正上方,带有排序选项,如“日期”、“价格(最高优先)”、“价格(最低优先)”等。当所选值更改时,我使用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);
}
私有列表排序域;
私有字符串selectedField,currentSortField;
私有布尔asc;
私人名单收集;
@EJB私有yourejbyourejb;
公共void init(){
//加载排序字段和要排序的字段列表
//设置currentSortField的默认值
asc=真;
collection=yourEjb.loadCollection(sortField,asc);
}
公开作废sortCollection(){
如果(currentSortField.equals)(selectedField){
asc=!asc;
}否则{
currentSortField=selectedField;
asc=真;
}
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();
}
公共列表loadCollection(字符串sortfield,布尔asc){
String q=“通过“+sortfield+”从实体e中选择e”;
如果(asc){
q+=“ASC”;
}否则{
q+=“描述”;
}
Query Query=entityManager.createQuery(q);
返回query.getResultList();
}

@BernadAli如果这对你来说不够清楚,我可以添加一些代码。谢谢Damian的建议。你能举个例子吗?这会很有帮助的谢谢@Damian,它很有帮助。@BernadAli如果这对你来说不够清楚,我可以添加一些代码。谢谢Damian的建议。你能举个例子吗?会很有帮助的这对Damian很有帮助。