我正在尝试在 Primeface 数据表上实现多重排序。我们使用的是 Primefaces v3.5。我在 LazyLoadClass 中创建了一个新的加载方法,该方法采用 List of SortMeta> 参数。
但是我在表格的初始加载中遇到了问题。调用load方法时,SortMeta>的List为null。我也尝试过不指定数据表的初始 sortBy 和 sortOrder 。在这两种情况下,结果是相同的。
看到我们有了这个新类 SortMeta 来支持多重排序,我怀疑指定初始排序字段和顺序的方式也会改变。但我在任何地方都找不到任何例子来指出差异。手册3.5没有提到任何区别。
为什么我们可以将 SortMeta> 的 List 设为 null?有关将 multisort 与 Lazyload 一起使用的示例代码的任何指针吗?
我能够让它发挥作用。
本质上,我们需要在 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 的快速提示。
@Murali D 您能告诉我更多关于 preSordOrder 的信息吗?