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>
      
      
      ...
      
      希望这对别人有帮助