rich:scrollableDataTable columnheader disappears
lehnert Jun 23, 2008 8:44 AMHi,
I use RichFaces 3.2.1 and have problems with the rich:scrollableDataTable, rich:columns and the a4j:commandLink.
When I start my application in IE, all column headers are displayed correctly.
When I start my application in Firefox, no column header is displayed.
If I invoke the rerender method in IE, the column headers disappear in IE also.
This problem is only by use the rich:scrollableDataTable and not by use rich:datatable.
Simple Eclipse demo project (475 KB): http://www.lehnert-online.de/richfaces/tableTest.zip
My xHtml code:
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE ui:component PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:component xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jstl/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"> <f:view contentType="text/html"> <h:form> <rich:scrollableDataTable id="dataList" width="300" height="300" border="0" var="data" value="#{tableBean.data}"> <rich:columns value="#{tableBean.columnModel}" var="col" index="index" sortable="no"> <f:facet name="header"> <a4j:commandLink value="#{col.title}" action="#{col.sort}" reRender="dataList" /> </f:facet> <h:outputText value="#{data.columns[index]}" /> </rich:columns> </rich:scrollableDataTable> <br /> </h:form> </f:view> </ui:component>
My java code:
package de.intermoves.listenvalidierung.datatable.beans; import java.util.ArrayList; import java.util.Date; import de.intermoves.listenvalidierung.datatable.data.ColumnModel; import de.intermoves.listenvalidierung.datatable.data.Data; public class TableBean { private ArrayList<Data> data= null; private ArrayList<ColumnModel> columnModel= null; public ArrayList<Data> getData() { if(data==null) { data= new ArrayList<Data>(); Date date= new Date(); data.add(Data.newInstance("1","red house", "100 - "+date.getTime())); data.add(Data.newInstance("2","grey house", "101 - "+date.getTime())); data.add(Data.newInstance("3","white house", "102 - "+date.getTime())); data.add(Data.newInstance("4","black house", "103 - "+date.getTime())); } return data; } public void setData(ArrayList<Data> data) { this.data = data; } public ArrayList<ColumnModel> getColumnModel() { if(columnModel==null) { columnModel= new ArrayList<ColumnModel>(); columnModel.add(ColumnModel.newInstance("Identifier")); columnModel.add(ColumnModel.newInstance("Name")); columnModel.add(ColumnModel.newInstance("Value")); } return columnModel; } public void setColumnModel(ArrayList<ColumnModel> columnModel) { this.columnModel = columnModel; } }
package de.intermoves.listenvalidierung.datatable.data; import java.io.Serializable; public class Data implements Serializable { private String[] columns= null; public String[] getColumns() { return columns; } public void setColumns(String[] columns) { this.columns = columns; } public static Data newInstance(String identifier, String name, String value) { Data data= new Data(); String[] columns= new String[3]; columns[0]= identifier; columns[1]= name; columns[2]= value; data.setColumns(columns); return data; } @Override public String toString() { return columns[0]+columns[1]+columns[2]; } @Override public int hashCode() { return toString().hashCode(); } @Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof Data)) { return false; } else { Data myother = (Data) other; if (this.toString().length() == 0) { if (myother.toString().length() == 0) { return true; } else { return false; } } else { if (myother.toString().length() == 0) { return false; } else { return (this.toString()).equals(myother.toString()); } } } } }
package de.intermoves.listenvalidierung.datatable.data; import java.io.Serializable; public class ColumnModel implements Serializable { private String title; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public static ColumnModel newInstance(String title) { ColumnModel columnModel= new ColumnModel(); columnModel.setTitle(title); return columnModel; } public void sort() { } @Override public String toString() { return title; } @Override public int hashCode() { return toString().hashCode(); } @Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof Data)) { return false; } else { Data myother = (Data) other; if (this.toString().length() == 0) { if (myother.toString().length() == 0) { return true; } else { return false; } } else { if (myother.toString().length() == 0) { return false; } else { return (this.toString()).equals(myother.toString()); } } } } }
Does anyone knows a solution on this?
Thanks
Rolf