Primefaces:如何获取 Java 中当前的排序顺序?

Dev*_*avo 1 java sorting jsf primefaces

Java中是否可以获取当前的排序顺序?

以下是汽车按年份排序的示例:

<p:column headerText="Year" sortBy="#{car.year}">
    <h:outputText value="#{car.year}" />
</p:column>
Run Code Online (Sandbox Code Playgroud)

通过扩展LazyDataModel<T>可以重写以下方法:

public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) {
    throw new UnsupportedOperationException("Lazy loading is not implemented.");
}
Run Code Online (Sandbox Code Playgroud)

但我想知道如何在不使用 LazyDataModel 的情况下做到这一点。

谢谢!

小智 5

正如 Jasper de Vries 评论的那样,您可以将 p:dataTable 绑定到后端的变量:

小面

<p:dataTable binding="#{bean.dataTable}" ...>
Run Code Online (Sandbox Code Playgroud)

豆类

private DataTable dataTable;

public DataTable getDataTable() {
   return dataTable;
}

public void setDataTable(DataTable dataTable) {
    this.dataTable = dataTable;
}

public void methodToAccessSortOrder() {
   String sortOrder = this.dataTable.getSortOrder();
   // do anything with sortOrder
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过提交数据表的 clientId 从视图根获取数据表:

public void methodToAccessSortOrder() {
   DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("<CLIENT ID OF DATATABLE>");
   String sortOrder = dataTable.getSortOrder();
   // do anything with sortOrder
}
Run Code Online (Sandbox Code Playgroud)