11

Primefaceデータテーブルにマルチソートを実装しようとしています。Primefacesv3.5を使用しています。ListofSortMeta>パラメーターを受け取る新しいloadメソッドをLazyLoadClassに作成しました。

しかし、テーブルの初期ロードに問題があります。loadメソッドが呼び出されると、SortMeta>のリストはnullになります。また、データテーブルの最初のsortByとsortOrderを指定せずに試しました。どちらの場合も、結果は同じです。

マルチソートをサポートするこの新しいクラスSortMetaがあることを考えると、最初のソートフィールドと順序を指定する方法も変更されたのではないかと思います。しかし、違いを示す例はどこにも見つかりませんでした。マニュアル3.5には違いは記載されていません。

なぜSortMetaのリスト>をnullとして取得できるのですか?マルチソートがLazyloadで使用されているサンプルコードへのポインタはありますか?

4

1 に答える 1

22

これを機能させることができました。

基本的に、SortMeta オブジェクトで UIColumn を提供して機能させる必要があります。レンダリング時の最初の並べ替えでは、Bean でコンポーネントを見つけて、それを sortMeta に割り当てる必要がありました。

以下はビューxhtmlの私のコードです

        <p:dataTable id="transDataTable" var="trans" 
        value="#{myBean.transModel}" paginator="true" rows="50"
        paginatorAlwaysVisible="false" lazy="true"
        sortMode="multiple" sortBy="#{myBean.preSortOrder}" 
        resizableColumns="true">

        <p:column headerText="User" sortBy="#{trans.user.name}" >
            #{trans.user.name}
        </p:column>
        <p:column headerText="Company" sortBy="#{trans.companyName}">
            #{trans.companyName}
        </p:column>
        <p:column headerText="Join Date" id="joinDateTime" 
            sortBy="#{trans.joinDateTime}" >
            <h:outputText value="#{trans.joinDateTime}" />
        </p:column>
    </p:dataTable>

これは @PostConstruct で呼び出された私の Bean コードです

        /*
     * method to build initial sort order for multisort
     */
    private void buildSortOrder() {
        UIViewRoot viewRoot =  FacesContext.getCurrentInstance().getViewRoot();
        UIComponent column = viewRoot.findComponent("transDataTable:joinDateTime"); 

        SortMeta sm1 = new SortMeta();
        sm1.setSortBy((UIColumn)column);
        sm1.setSortField("joinDateTime");
        sm1.setSortOrder(SortOrder.DESCENDING);
        preSortOrder.add(sm1);          
    }

これが正しい方法かどうかはわかりませんが、うまくいきます。Bean コードでビューからの ID を使用する必要がある場合、私は通常不快です。人々が注意を怠るとバグが発生する可能性があるからです。

簡単なヒントをくれた@CagatayCiviciに感謝します。

于 2013-03-05T13:59:42.920 に答える