首页 > 解决方案 > Primefaces 8 上的 TableState.getMultiSortMeta()

问题描述

我正在从 Primefaces 版本 7 升级到版本 8。PrimeFaces 8 下的模型中不再有可用的getMultiSortMeta()方法TableState。有谁知道如何替换以下方法并使其在 PrimeFaces 8 中工作?

public void onSort(SortEvent event) {
    List<SortMeta> sortMeta = ((DataTable) 
        event.getComponent()).getMultiSortMeta();

    channelsViewConfig.setMultiSortMeta(sortMeta);
}

标签: sortingprimefaces

解决方案


在 Primefaces 8 中, sortMeta 不再是 a List,而是用于Map<columnKey,sortMeta>获取已排序的集合。这个集合是通过属性获得的,sortMeta而不是使用sortBy;

<p:dataTable id="resultedtable"
             value="#{bean.member}" var="member"
             styleClass="resultedTable" paginator="true"
             paginatorPosition="bottom"
             pageLinks="5"
             rowsPerPageTemplate="5,10"
             sortMode="multiple"
             sortMeta="bean.preSortOrder">

<p:column id="column1" headerText="column1" sortBy="#{member.column1}">
    <h:outputText value="#{member.column1}" />
</p:column>
<p:column id="column2" headerText="column2" sortBy="#{member.column2}">
    <h:outputText value="#{member.column2}" />
</p:column>

集合的支持 bean getter 看起来像这样:

public Map<String, SortMeta> getPreSortOrder() {      
    UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
    DataTable datatable = (DataTable) 
    viewRoot.findComponent("resultedtable"); 
      
    UIColumn sortColumn = datatable.getColumns().get(0); // Sortby - firstcolumn
    String sortField = sortColumn.getClientId(); // SortField - firstcolumn
      
    SortMeta sortMeta = new SortMeta(sortColumn.getColumnKey(),
        sortField, SortOrder.ASCENDING, null
    );

    preSortOrder = new LinkedHashMap<String, SortMeta>();
    preSortOrder.put(sortColumn.getColumnKey(), sortMeta);
    return preSortOrder;
}

推荐阅读