Primefaces Datatable具有动态列的自定义排序函数

Primefaces Datatable具有动态列的自定义排序函数,primefaces,datatable,Primefaces,Datatable,使用Primefaces 3.5,当我尝试对动态列使用自定义排序函数时,会出现PropertyNotFoundException 我的xhtml文件中的datatable只是显示相关代码 ... 我的视图范围支持bean中的不完整方法是: public int customSortObject val1,Object val2{ System.out.printlnmySort+val1+/+val2; 返回0; } 问题是我无法在bean中访问此方法,并且我得到以下错误: G

使用Primefaces 3.5,当我尝试对动态列使用自定义排序函数时,会出现PropertyNotFoundException

我的xhtml文件中的datatable只是显示相关代码

... 我的视图范围支持bean中的不完整方法是:

public int customSortObject val1,Object val2{ System.out.printlnmySort+val1+/+val2; 返回0; } 问题是我无法在bean中访问此方法,并且我得到以下错误:

GRAVE [javax.enterprise.resource.webcontainer.jsf.context] (http--0.0.0.0-8080-3) javax.el.PropertyNotFoundException: /monitoraggio.xhtml @80,161 sortFunction="#{monitoraggioBean.customSort}": The class 'com.packman.bean.MonitoraggioBean' does not have the property 'customSort'.
我已经尝试过使用p:column标记的自定义排序函数,它可以正常工作

有什么想法吗


谢谢

我想出了一个解决方案。我认为这是PrimeFaces3.5在p列标记和sortFunction属性上的一个缺陷

Primefaces需要sortFunction={monitoraggioBean.customSort}上的方法表达式,但它希望将其视为值表达式,并尝试查找getter/setter方法

我的解决方法是在sortFunction中为name方法定义getter,并在backingbean中创建方法表达式

公共方法表达式getOrdina{ FacesContext context=FacesContext.getCurrentInstance; 返回context.getApplication.getExpressionFactory.createMethodExpressioncontext.getELContext,{monitoraggioBean.ordina},Integer.class,新类[]{Object.class,Object.class}; } 自定义排序的方法也必须在bean中定义:

public int customSortObject val1,Object val2{ System.out.printlnmySort+val1+/+val2; 返回0; } 这样,当您单击列的标题时,首先调用getOrdina,然后调用customSort…,您可以在其中实现排序逻辑


享受吧

我想出了一个解决方案。我认为这是PrimeFaces3.5在p列标记和sortFunction属性上的一个缺陷

Primefaces需要sortFunction={monitoraggioBean.customSort}上的方法表达式,但它希望将其视为值表达式,并尝试查找getter/setter方法

我的解决方法是在sortFunction中为name方法定义getter,并在backingbean中创建方法表达式

公共方法表达式getOrdina{ FacesContext context=FacesContext.getCurrentInstance; 返回context.getApplication.getExpressionFactory.createMethodExpressioncontext.getELContext,{monitoraggioBean.ordina},Integer.class,新类[]{Object.class,Object.class}; } 自定义排序的方法也必须在bean中定义:

public int customSortObject val1,Object val2{ System.out.printlnmySort+val1+/+val2; 返回0; } 这样,当您单击列的标题时,首先调用getOrdina,然后调用customSort…,您可以在其中实现排序逻辑


享受吧

我遇到了一个类似的问题,我就是这样解决的

首先,我制作了一个Sorter类助手,然后通过EL在JSF页面中使用它

Sorter.java

@组成部分 公共类分拣机{ /** *比较两个在其int值上为字符串的对象。可用于对包含基于整数的数据的任何列进行排序。 *@param obj1 *@param obj2 *@返回 */ public int sortIdByStringObject obj1,Object obj2{ int id1=Integer.parseIntStringobj1; int id2=Integer.parseIntStringobj2; ifid1
我也遇到过类似的问题,我就是这样解决的

首先,我制作了一个Sorter类助手,然后通过EL在JSF页面中使用它

Sorter.java

@组成部分 公共类分拣机{ /** *比较两个在其int值上为字符串的对象。可用于对包含基于整数的数据的任何列进行排序。 *@param obj1 *@param obj2 *@返回 */ public int sortIdByStringObject obj1,Object obj2{ int id1=Integer.parseIntStringobj1; int id2=Integer.parseIntStringobj2; ifid1
此问题和解决方案也发布在中。此问题和解决方案也发布在中。