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