Using Primefaces 3.5, I get a PropertyNotFoundException
when I try to use a custom sort function with dynamic columns.
My datatable in xhtml file is (just show the relevant code)
<p:dataTable id="dataTableVersioneMonitoraggio" var="row" value="# {monitoraggioBean.pacchetti}"
rowKey="#{row.pacchetto.id}">
<p:columns value="#{monitoraggioBean.columns}" var="column"
sortBy="#{row.celle[column.posizione].cella.valore}"
sortFunction="#{monitoraggioBean.customSort}">
...
</p:columns>
</p:dataTable>
The incomplete method in my view scope backing bean is:
public int customSort(Object val1, Object val2) {
System.out.println("mySort" + val1 + "/" + val2);
return 0;
}
The problem is I can't reach this method in the bean and I get the following errors:
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'.
I have tried custom sort function with p:column tag and it works.
Any idea ?
Thanks
I've come up with a solution/workaround. I think this is a bug of Primefaces 3.5 on p columns tag and sortFunction property.
Primefaces expects a method expression on
sortFunction="#{monitoraggioBean.customSort}"
but it wants to treat it as value expression and tries to find out for getter/setter methods.My workaround is to define "getter" for the name method in sortFunction and to create the Method Expression in the backing bean.
The mehod for custom sorting has to be defined too in the bean:
In this way, when you click on the header of a column firstly getOrdina() is called and then customSort(...), where you can implement your sorting logic.
Enjoy ! :)