Jsf PrimeFaces数据表默认排序来自支持bean

Jsf PrimeFaces数据表默认排序来自支持bean,jsf,primefaces,Jsf,Primefaces,我有一个带有POJO对象的数据表: <p:dataTable id="table" var="object" sortBy="#{object.name}" sortOrder="DESCENDING"> 我的任务检测用户想要排序的列,并将其持久化到db。重新加载后,数据表应按此列排序 当我设定 sortBy="#{bean.sortBy}" // sortBy = name 它不起作用,并且呈现页面后数据表未排序 请提供帮助。如果将数据表绑定到bean中的org.primefa

我有一个带有POJO对象的数据表:

<p:dataTable id="table" var="object" sortBy="#{object.name}" sortOrder="DESCENDING">
我的任务检测用户想要排序的列,并将其持久化到db。重新加载后,数据表应按此列排序

当我设定

sortBy="#{bean.sortBy}" // sortBy = name
它不起作用,并且呈现页面后数据表未排序


请提供帮助。

如果将数据表绑定到bean中的
org.primefaces.component.datatable.datatable
对象查找bean中的表组件,则可以使用表对象以编程方式设置
排序值表达式

要了解PrimeFaces是如何处理排序的,您可以查看

当您拥有sort列时,可以很容易地获得sort值表达式。因此,在您的听众中,您可以使用以下内容:

UIColumn sortColumn = sortEvent.getSortColumn();
ValueExpression sortByVE = sortColumn.getValueExpression("sortBy");
FacesContext context = FacesContext.getCurrentInstance();
ExpressionFactory ef = context.getApplication().getExpressionFactory();
ValueExpression ve = ef.createValueExpression(context.getELContext(),
                                              "#{object.name}",
                                              Object.class);
dataTable.setValueExpression("sortBy", ve);
顺便说一下,您可以在排序侦听器方法中将参数类型
AjaxBehaviorEvent
替换为
SortEvent

现在,存储
sortByVE
表达式,并在需要时将其设置为绑定表的
sortBy
值表达式:

dataTable.setValueExpression("sortBy", sortByVE);
如果要从头开始创建值表达式,请使用以下命令:

UIColumn sortColumn = sortEvent.getSortColumn();
ValueExpression sortByVE = sortColumn.getValueExpression("sortBy");
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中找到表,可能会有所帮助。它还提供了一个新的解决方案

另见:


如果将数据表绑定到bean中的
org.primefaces.component.datatable.datatable
对象在bean中查找表组件,则可以使用表对象以编程方式设置
sortBy
值表达式

要了解PrimeFaces是如何处理排序的,您可以查看

当您拥有sort列时,可以很容易地获得sort值表达式。因此,在您的听众中,您可以使用以下内容:

UIColumn sortColumn = sortEvent.getSortColumn();
ValueExpression sortByVE = sortColumn.getValueExpression("sortBy");
FacesContext context = FacesContext.getCurrentInstance();
ExpressionFactory ef = context.getApplication().getExpressionFactory();
ValueExpression ve = ef.createValueExpression(context.getELContext(),
                                              "#{object.name}",
                                              Object.class);
dataTable.setValueExpression("sortBy", ve);
顺便说一下,您可以在排序侦听器方法中将参数类型
AjaxBehaviorEvent
替换为
SortEvent

现在,存储
sortByVE
表达式,并在需要时将其设置为绑定表的
sortBy
值表达式:

dataTable.setValueExpression("sortBy", sortByVE);
如果要从头开始创建值表达式,请使用以下命令:

UIColumn sortColumn = sortEvent.getSortColumn();
ValueExpression sortByVE = sortColumn.getValueExpression("sortBy");
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中找到表,可能会有所帮助。它还提供了一个新的解决方案

另见: