簡體   English   中英

PrimeFaces數據表默認排序方式

[英]PrimeFaces datatable default sortBy from backing bean

我有一個帶有POJO對象的數據表:

<p:dataTable id="table" var="object" sortBy="#{object.name}" sortOrder="DESCENDING">

object具有字段idnamedatesize等。 我可以使用xhtml設置默認的排序字段,但是我想從backing bean設置它。

當用戶創建示例name排序請求時,我能夠解析列id

public void sortEventListener(AjaxBehaviorEvent actionEvent) {
    String id = ((SortEvent) actionEvent).getSortColumn().getColumnKey();
    String[] idPath = id.split(":");
    sortBy = idPath[idPath.length - 1];
    sortOrder = ((SortEvent) actionEvent).isAscending();
}

我的任務將檢測用戶要排序的列並將其持久化到db。 重新加載后,數據表應按此列排序。

當我設定

sortBy="#{bean.sortBy}" // sortBy = name

呈現頁面后,它不起作用並且數據表未排序。

請幫忙。

如果將數據表綁定到bean中的org.primefaces.component.datatable.DataTable對象在bean中找到表組件,則可以使用表對象以編程方式設置sortBy值表達式。

要了解PrimeFaces如何處理排序,可以查看GitHub上源代碼

當擁有排序列時,您可以輕松獲得排序值表達式。 因此,在您的聽眾中,您可以使用類似以下的內容:

UIColumn sortColumn = sortEvent.getSortColumn();
ValueExpression sortByVE = sortColumn.getValueExpression("sortBy");

順便說一句,您可以替換參數類型AjaxBehaviorEventSortEvent在您的排序監聽方法。

現在,存儲sortByVE表達式,並在需要時將其設置為綁定表的sortBy值表達式:

dataTable.setValueExpression("sortBy", sortByVE);

如果要從頭開始創建值表達式,請使用類似以下內容的方法:

FacesContext context = FacesContext.getCurrentInstance();
ExpressionFactory ef = context.getApplication().getExpressionFactory();
ValueExpression ve = ef.createValueExpression(context.getELContext(),
                                              "#{object.name}",
                                              Object.class);
dataTable.setValueExpression("sortBy", ve);

在此示例中, "#{object.name}"是固定的。 您應該基於從排序偵聽器獲得的值來構造它。

如果要在bean中找到表, OmniFaces組件可能會有所幫助。 它還提供了一種創建值表達式快捷方法

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM