Исходный порядок сортировки для PrimeFaces, который можно использовать с мультисортировкой

Я пытаюсь реализовать multisort на основе данных Primface. Мы используем Primefaces v3.5. Я создал новый метод загрузки в LazyLoadClass, который принимает параметр List of SortMeta > .

Но у меня возникают проблемы с начальной загрузкой таблицы. Список SortMeta > имеет значение null при вызове метода загрузки. Я также пробовал, не указав начальные sortBy и sortOrder для datatable. В обоих случаях результат одинаков.

Увидев, что у нас есть этот новый класс SortMeta для поддержки многозадачности, я подозреваю, что способ указать начальное поле сортировки и порядок также изменился бы. Но я не мог найти ни одного примера, чтобы указать разницу. В руководстве 3.5 не упоминается какая-либо разница.

Почему мы можем получить список SortMeta > как null? Любые указатели на примере кода, где используется многопользовательский режим с Lazyload?

Ответ 1

Я смог заставить это работать.

По существу, нам нужно предоставить UIColumn в объекте SortMeta, чтобы он работал. Для начальной сортировки во время рендеринга мне пришлось найти компонент в моем 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>

Вот мой код bean, вызываемый в @PostConstruct

        /*
     * 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, так как это может привести к ошибкам, когда люди не будут осторожны.

Спасибо @CagatayCivici за быстрый подсказку.