Jsf PrimeFaces数据表默认排序来自支持bean
我有一个带有POJO对象的数据表: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
<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中找到表,可能会有所帮助。它还提供了一个新的解决方案
另见: