我试图对可通过地图结构(在其值中)访问的列表进行排序,如下所示:
<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
}
但是我得到了描述的例外:
多选参考必须是数组或数据表的列表
如何currentList
属性可以访问sortMode="multiple"
?
注意:我还尝试使用HashMap<Object, List<Object>> map
的简单版本和value="#{bean.map[currentKey]}"
等xhtml代码,并获得相同的例外。
答案 0 :(得分:2)
我自己找到了解决方案。
对于这种特定情况,其中p:dataTable
的列表值存储在地图结构中,我需要区分每个表的排序(在我的支持bean中声明的private HashMap<Object, ArrayList<SortMeta>> objectSortMapping;
)。 / p>
解决方案是为支持bean中的每个列表(在List<MetaSort>
中)定义map
- 引用要排序的UIColumn
首选项。
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);
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>
希望这有助于某人。