Sorting 如何基于map值实现JSF数据表的多重排序
我试图对一个列表进行排序,该列表可以通过映射结构(在其值中)访问,如下所示:Sorting 如何基于map值实现JSF数据表的多重排序,sorting,jsf,primefaces,datatable,Sorting,Jsf,Primefaces,Datatable,我试图对一个列表进行排序,该列表可以通过映射结构(在其值中)访问,如下所示: <ui:param name="currentKey" value="..." /> <p:dataTable value="#{bean.map[currentKey].currentList}" sortMode="multiple"> ... </p:dataTable> ... 和对应的bean class Bean { HashMap<Objec
<ui:param name="currentKey" value="..." />
<p:dataTable value="#{bean.map[currentKey].currentList}" sortMode="multiple">
...
</p:dataTable>
...
和对应的bean
class Bean {
HashMap<Object, MyDataModel> map; // + getter
}
class MyDataModel {
List<Object> currentList; // + getter
}
类Bean{
HashMap映射;//+getter
}
类MyDataModel{
List currentList;//+getter
}
但我得到了一个例外的描述:
多选引用必须是datatable的数组或列表
如何访问currentList
属性才能使sortMode=“multiple”
正常工作
注意:我还尝试了使用HashMap-map
和类似value=“#{bean.map[currentKey]}”
的xhtml代码的简单版本,得到了相同的异常
- JSF2
- Primefaces 5.0
- 我自己找到了解决办法
对于这个特定的情况,
p:dataTable
的列表值存储在映射结构中,我需要区分每个表的排序(private HashMap objectSortMapping;
在我的支持bean中声明)
解决方案是为支持bean中的每个列表(在map
中)定义一个List
——参考排序首选的ui列
ArrayList<SortMeta> sortMeta = new ArrayList<>();
UIComponent viewRoot = getFacesContext().getViewRoot();
UIComponent component = viewRoot.findComponent(":idPathTo:column1");
SortMeta sortMetaColumn = new SortMeta();
sortMetaColumn.setSortBy((UIColumn) component);
sortMetaColumn.setSortOrder(SortOrder.ASCENDING);
sortMetaColumn.setSortField("column1");
sortMeta.add(sortMetaColumn);
ArrayList sortMeta=new ArrayList();
UIComponent viewRoot=getFacesContext().getViewRoot();
UIComponent=viewRoot.findComponent(“:idPathTo:column1”);
SortMeta sortMetaColumn=新SortMeta();
sortMetaColumn.setSortBy((UIColumn)组件);
sortMetaColumn.setSortOrder(SortOrder.升序);
sortMetaColumn.setSortField(“column1”);
添加(sortMeta列);
xhtml看起来像
<ui:param name="currentKey" value="..." />
<p:dataTable value="#{bean.map[currentKey].currentList}" var="item"
sortMode="multiple"
sortBy="#{bean.objectSortMapping[currentKey]}">
<p:column id="column1" sortBy="#{item.property}">
...
</p:column>
</p:dataTable>
...
希望这对别人有帮助