We are currently using Primefaces version 8 and I am working on migrating us to version 12.
In the migration guide 8.0 -> 10.0.0, under DataTable, Breaking changes says this:
SortEvent: sorted datatable value is no longer passed to this event, instead get the sorted value through your managed bean (e.g YourBean#list used as value expression)
For the life of me I cannot figure out how to pass the column being sorted as a value expression.
Here is what we currently have working using Primefaces 8 (simplified):
<p:dataTable id="searchResultsTable"
value="#{nameBackingBean.queryResults}"
var="searchResultsRow" widgetVar="tableWidget"
sortBy="#{searchResultsRow.name}" sortOrder="ascending">
<p:ajax event="sort" listener="#{nameBackingBean.sortedColumnSelected}" />
<!-- Name -->
<p:column headerText="Name"
sortBy="#{searchResultsRow.name}">
<h:outputText id="nameValue"
value="#{searchResultsRow.name}" />
</p:column>
<!-- Age -->
<p:column headerText="Age"
sortBy="#{searchResultsRow.age}">
<h:outputText id="ageValue"
value="#{searchResultsRow.age}" />
</p:column>
...
And here is the java backing bean method that is called when a sort is performed:
public void sortedColumnSelected(AjaxBehaviorEvent event){
if (null != event.getSource()){
DataTable table = (DataTable) event.getSource();
if(table != null && table.getSortColumn() != null){
String headerText = table.getSortColumn().getHeaderText();
String sortOrder = table.getSortOrder();
if(headerText.equals("Name")){
//we do something
}else if (headerText.equals("Age")){
//we do something else
...
The getSortColumn method is no longer available after Primefaces 8, so I am assuming I have to use some EL expression to figure out which column was sorted (based off of the sentence e.g. YourBean#list used as a value expression) and pass the value in like this...
<p:ajax event="sort" listener="#{nameBackingBean.sortedColumnSelected(el expression telling me what column was sorted)}" />
If anyone knows how to format the value expression to tell me which column was sorted, I would really appreciate it!