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
 
     
     
     
     
     
     
    