RF 4.3.1, ExtendedDataTable: columnsOrder doesnt work after changing order
dako_t Apr 17, 2013 9:02 AMHi all,
according to the resolved bug RF-11776 I tried the attribute columnsOrder in ExtendedDataTable.
I have a simple test case with a data table and an action button. Within the action button method I change the String Array of the attribute columnsOrder but the columns of the data table is rendered in the old order.
I have appended a test project to reproduce it.
I have created a JIRA bug: https://issues.jboss.org/browse/RF-12928
Maybe someone knows a workaround.
The project is tested in Tomcat 7 with Mojarra 2.1.21.
the same results in JBoss 6 and Mojarra 2.1.17.
And now the code:
xhtml page:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"> <h:head> <title>RichFaces-Test: start page</title> </h:head> <h:body> <h3>RichFaces-Test: start page</h3> <h:form id="overviewForm"> <p> <h:outputText value="List of persons:" /> </p> <p> <a4j:commandButton value="Change columns order(Ajax)" action="#{overviewController.changeColumnsOrderWithAjax()}" render="overviewTable" immediate="true"/> </p> <p> <h:commandButton value="Change columns order(full refresh)" action="#{overviewController.changeColumnsOrderFullRefresh()}" immediate="true"/> </p> <rich:extendedDataTable id="overviewTable" rowKeyVar="index" columnsOrder="#{overviewController.columnsOrder}" value="#{overviewController.tableItems}" var="tableItem" rows="15"> <f:facet name="header"> </f:facet> <rich:column id="city"> <f:facet name="header"> <h:outputText value="City" /> </f:facet> <h:outputText value="#{tableItem.city}" /> </rich:column> <rich:column id="firstName"> <f:facet name="header"> <h:outputText value="First Name" /> </f:facet> <h:outputText value="#{tableItem.firstName}" /> </rich:column> <rich:column id="country"> <f:facet name="header"> <h:outputText value="Country" /> </f:facet> <h:outputText value="#{tableItem.country}" /> </rich:column> </rich:extendedDataTable> </h:form> </h:body> </html>
ManagedBean:
package org.richfaces.test.ak; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; @ManagedBean @SessionScoped public class OverviewController implements Serializable{ private static final long serialVersionUID = 544466031058458542L; private List<TableItem> tableItems; private String[] columnsOrder; @PostConstruct public void postConstruct() { System.out.println("start: postConstruct"); tableItems = new ArrayList<TableItem>(); tableItems.add(new TableItem("Oliver", "New York", "USA")); tableItems.add(new TableItem("Jane", "Washington", "USA")); tableItems.add(new TableItem("Fred", "Berlin", "Germany")); tableItems.add(new TableItem("Thomas", "London", "England")); columnsOrder = new String[] {"firstName", "city", "country" }; } public void changeColumnsOrderWithAjax() { System.out.println("start: changeColumnsOrderWithAjax"); changeColumnsOrder(); } public String changeColumnsOrderFullRefresh() { System.out.println("start: changeColumnsOrderFullRefresh"); changeColumnsOrder(); return ""; } private void changeColumnsOrder() { logColumnsOrder("before"); if (columnsOrder[0].equals("firstName")) { columnsOrder = new String[] {"country", "city", "firstName" }; } else { columnsOrder = new String[] {"firstName", "city", "country" }; } logColumnsOrder("after"); } private void logColumnsOrder(String logIdent) { System.out.println("logColumnsOrder " + logIdent); int idx = 0; System.out.println("logColumnsOrder, order is: "); for (String column : columnsOrder) { System.out.println("column " + (idx++) + ": " + column); } } public List<TableItem> getTableItems() { return tableItems; } public void setTableItems(List<TableItem> tableItems) { this.tableItems = tableItems; } public String[] getColumnsOrder() { return columnsOrder; } }
Table item:
package org.richfaces.test.ak; public class TableItem { private String firstName; private String city; private String country; public TableItem() { } public TableItem(String firstName, String city, String country) { this.firstName = firstName; this.city = city; this.country = country; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
Best regards
-
JSF2-RichFaces-Test.zip 9.0 KB