![](/img/trans.png)
[英]Primefaces datatable is not populating with the list from backing bean
[英]PrimeFaces datatable default sortBy from backing bean
我有一個帶有POJO對象的數據表:
<p:dataTable id="table" var="object" sortBy="#{object.name}" sortOrder="DESCENDING">
object
具有字段id
, name
, date
, size
等。 我可以使用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");
順便說一句,您可以替換參數類型AjaxBehaviorEvent
與SortEvent
在您的排序監聽方法。
現在,存儲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.