具有多重排序的PrimeFaces数据表的初始排序顺序

Mur*_*i D 10 primefaces jsf-2

我正在尝试在Primeface数据表上实现多重排序.我们使用的是Primefaces v3.5.我在LazyLoadClass中创建了一个新的加载方法,该方法采用List of SortMeta>参数.

但是我在表的初始加载中遇到了问题.调用load方法时,SortMeta列表>为null.我也试过没有为数据表指定初始sortBy和sortOrder.在这两种情况下,结果都是一样的.

看到我们有这个新类SortMeta支持多重排序,我怀疑指定初始排序字段和顺序的方式也会发生变化.但我找不到任何可以指出差异的例子.手册3.5没有提到任何区别.

为什么我们可以将SortMeta列表>作为null?关于多重命令与Lazyload一起使用的示例代码的任何指针?

Mur*_*i D 20

我能够让这个工作.

基本上我们需要在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>
Run Code Online (Sandbox Code Playgroud)

这是我在@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);          
    }
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是正确的方法,但它确实有效.当我们必须在bean代码中使用视图中的id时,我通常会感到不舒服,因为当人们不小心时会引入错误.

感谢@CagatayCivici的快速提示.

  • 确实,很抱歉,我没有时间提供完整的样本,所以只能提供小费。感谢您分享详细的示例。 (2认同)