1

Primefaces 3.5 在 dataTable 上引入了多排序。但它有一个分页错误。

每次按下分页器按钮时,在表格初始渲染时设置的排序列(col 的 sortMeta obj)被发送到 load 方法,而不是选定的排序列。如果未设置初始 sortOrder,则发送 null。

有没有解决这个问题?有人知道这是否已在任何精英版本中得到修复?或者是否有解决方法?

需要一些紧急帮助。

谢谢

4

1 回答 1

1

我能够通过在应用程序中进行一些额外的编码来克服这个问题。如果在更高版本中修复了原始错误,则不需要这样做。

我的解决方案

我添加了 2 个 ajax 事件,用于表格上的“排序”和“页面”。我看到在每个“排序”中,表都有正确的多排序元列表,但是在分页调用中,它被初始数据覆盖了。

因此,我在每次排序调用和分页调用时都保存了 bean 中的 multisortmeta 列表,我已经用 bean 中的内容覆盖了表的 multisortmeta 列表。我的 bean 是一个会话 bean,因此保存列表没有问题。

完成此操作后,多重排序正在处理分页。下面是我的代码

查看/xhtml 代码

                <p:dataTable id="userDataTable"
                value="#{userBean.userModel}" var="usr"
                paginator="true" paginatorAlwaysVisible="false" sortMode="multiple"
                rowsPerPageTemplate="20,40,60" rows="20"
                sortBy="#{userBean.preSortOrder}" lazy="true"
                resizableColumns="false" >

            <p:ajax event="page" listener="#{userBean.onPage}" ></p:ajax> 
            <p:ajax event="sort" listener="#{userBean.onSort}" ></p:ajax>

豆码

public void onSort( SortEvent event) {
    UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
    UIComponent tableComp = viewRoot.findComponent("userForm:userDataTable");
    DataTable table = ((DataTable)tableComp);
    preSortOrder = table.getMultiSortMeta();
 }
    public void onPage() {
    UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
    UIComponent tableComp = viewRoot.findComponent("userForm:userDataTable");
    DataTable table = ((DataTable)tableComp);
    table.setMultiSortMeta(preSortOrder);       
}

希望这对其他人也有用。

于 2013-05-21T07:16:53.190 回答