1

プライムフェイスのデータグリッドデータをソートすることは可能ですか? データテーブルで可能であることは承知しています。デフォルトで不可能な場合、他に方法はありますか? ありがとう

4

1 に答える 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 に答える