- 
        1. Re: problem with dataTable in firefox3nbelaevski Jun 3, 2009 5:03 AM (in response to gana)Hi Gana, 
 Post page code.
- 
        2. Re: problem with dataTable in firefox3gana Jun 3, 2009 5:17 AM (in response to gana)Hi, 
 Please find my code below.
 dataTable.xhtml:
 -------------------
 <!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:a4j="https://ajax4jsf.dev.java.net/ajax"
 xmlns:cc="http://webui.nsn.com/calypso"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:t="http://myfaces.apache.org/tomahawk"
 xmlns:c="http://java.sun.com/jstl/core"
 xmlns:rich="http://richfaces.org/rich">
 <ui:composition>
 .rich-datascr-button
 {
 background-color:#E6E6E6;
 }
 <f:view>
 <h:form>
 <rich:datascroller align="left" for="dataTable" maxPages="10"/>
 <rich:dataTable value="#{bean.data}" var="data" rows="40" id="dataTable" styleClass="tagTable" rowClasses="odd,even">
 <rich:column>
 <f:facet name="header">PERIOD_START_TIME</f:facet>
 <h:outputText value="#{data.PERIOD_START_TIME}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header">TYPE</f:facet>
 <h:outputText value="#{data.TYPE}"/>
 </rich:column>
 <rich:column >
 <f:facet name="header">BTS_INT_ID</f:facet>
 <h:outputText value="#{data.BTS_INT_ID}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header">BSC_INT_ID</f:facet>
 <h:outputText value="#{data.BSC_INT_ID}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header">BSC_NAME</f:facet>
 <h:outputText value="#{data.BSC_NAME}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header">BTS_NAME</f:facet>
 <h:outputText value="#{data.BTS_NAME}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header">PERIOD_DURATION</f:facet>
 <h:outputText value="#{data.PERIOD_DURATION}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header">CONNECTS</f:facet>
 <h:outputText value="#{data.CONNECTS}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header">ERRORS</f:facet>
 <h:outputText value="#{data.ERRORS}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header">BYTES</f:facet>
 <h:outputText value="#{data.BYTES}"/>
 </rich:column>
 </rich:dataTable>
 </h:form>
 </f:view>
 </ui:composition>
 Bean:
 -------
 package com.yourcompany.managedbeans;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.sql.DataSource;
 public class Bean {
 private TestDataModel data;
 private ResultSet demoData;
 private Connection conn;
 private Integer pk;
 private String PERIOD_START_TIME;
 private String TYPE;
 private String BTS_INT_ID;
 private String BSC_INT_ID;
 private String BSC_NAME;
 private String BTS_NAME;
 private String PERIOD_DURATION;
 private String CONNECTS;
 private String ERRORS;
 private String BYTES;
 public Bean()
 {
 conn = null;
 demoData = null;
 try {
 Context initContext = new InitialContext();
 Context envContext = (Context)initContext.lookup("java:/comp/env");
 DataSource ds = (DataSource)envContext.lookup("jdbc/derby");
 conn = ds.getConnection();
 Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
 demoData = stmt.executeQuery("select * from webscript.demodata");
 demoData.absolute(100);
 System.out.println("Gana demoData:"+demoData);
 } catch (NamingException e) {
 e.printStackTrace();
 } catch (SQLException e) {
 e.printStackTrace();
 }
 }
 public TestDataModel getData() {
 TestDataModel tdm = new TestDataModel(demoData);
 data = tdm;
 return data;
 }
 public void setData(TestDataModel data) {
 this.data = data;
 }
 public ResultSet getDemoData() {
 return demoData;
 }
 public void setDemoData(ResultSet demoData) {
 this.demoData = demoData;
 }
 public Integer getPk() {
 return pk;
 }
 public void setPk(Integer pk) {
 this.pk = pk;
 }
 public String getPERIOD_START_TIME() {
 return PERIOD_START_TIME;
 }
 public void setPERIOD_START_TIME(String period_start_time) {
 PERIOD_START_TIME = period_start_time;
 }
 public String getTYPE() {
 return TYPE;
 }
 public void setTYPE(String type) {
 TYPE = type;
 }
 public String getBTS_INT_ID() {
 return BTS_INT_ID;
 }
 public void setBTS_INT_ID(String bts_int_id) {
 BTS_INT_ID = bts_int_id;
 }
 public String getBSC_INT_ID() {
 return BSC_INT_ID;
 }
 public void setBSC_INT_ID(String bsc_int_id) {
 BSC_INT_ID = bsc_int_id;
 }
 public String getBSC_NAME() {
 return BSC_NAME;
 }
 public void setBSC_NAME(String bsc_name) {
 BSC_NAME = bsc_name;
 }
 public String getBTS_NAME() {
 return BTS_NAME;
 }
 public void setBTS_NAME(String bts_name) {
 BTS_NAME = bts_name;
 }
 public String getPERIOD_DURATION() {
 return PERIOD_DURATION;
 }
 public void setPERIOD_DURATION(String period_duration) {
 PERIOD_DURATION = period_duration;
 }
 public String getCONNECTS() {
 return CONNECTS;
 }
 public void setCONNECTS(String connects) {
 CONNECTS = connects;
 }
 public String getERRORS() {
 return ERRORS;
 }
 public void setERRORS(String errors) {
 ERRORS = errors;
 }
 public String getBYTES() {
 return BYTES;
 }
 public void setBYTES(String bytes) {
 BYTES = bytes;
 }
 public static void update() {
 // TODO Auto-generated method stub
 }
 }
 TestDataModel:
 ------------------
 package com.yourcompany.managedbeans;
 import java.io.IOException;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.util.Hashtable;
 import javax.faces.context.FacesContext;
 import org.ajax4jsf.model.DataVisitor;
 import org.ajax4jsf.model.Range;
 import org.ajax4jsf.model.SequenceRange;
 import org.ajax4jsf.model.SerializableDataModel;
 /**
 *
 * @author ias
 * This is example class that intended to demonstrate use of ExtendedDataModel and SerializableDataModel.
 * This implementation intended to be used as a request scope bean. However, it actually provides serialized
 * state, so on a post-back we do not load data from the data provider. Instead we use data that was used
 * during rendering.
 * This data model must be used together with Data Provider, which is responsible for actual data load
 * from the database using specific filtering and sorting. Normally Data Provider must be in either session, or conversation
 * scope.
 */
 @SuppressWarnings("unchecked")
 public class TestDataModel extends SerializableDataModel {
 private Integer currentPk;
 private ResultSet result;
 Hashtable hash;
 private static final long serialVersionUID = -1956179896877538628L;
 public TestDataModel(ResultSet demoData) {
 result = demoData;
 }
 /**
 * This method never called from framework.
 * (non-Javadoc)
 * @see org.ajax4jsf.model.ExtendedDataModel#getRowKey()
 */
 @Override
 public Object getRowKey() {
 return currentPk;
 }
 /**
 * This method normally called by Visitor before request Data Row.
 */
 @Override
 public void setRowKey(Object key) {
 this.currentPk = (Integer) key;
 }
 /**
 * This is main part of Visitor pattern. Method called by framework many times during request processing.
 */
 @Override
 public void walk(FacesContext context, DataVisitor visitor, Range range, Object argument) throws IOException {
 int firstRow = ((SequenceRange)range).getFirstRow();
 int numberOfRows = ((SequenceRange)range).getRows();
 for(int i = 0;i<numberOfRows;i++)
 {
 visitor.process(context,i + firstRow,argument);
 }
 }
 /**
 * This method must return actual data rows count from the Data Provider. It is used by pagination control
 * to determine total number of data items.
 */
 private Integer rowCount; // better to buffer row count locally
 @Override
 public int getRowCount() {
 try{
 int currentRow = result.getRow();
 rowCount = result.last() ? result.getRow() : 0;
 if(currentRow == 0)
 result.beforeFirst();
 else
 result.absolute(currentRow);
 }catch (SQLException e) {
 e.printStackTrace();
 }
 System.out.println("Gana getRowCount:"+rowCount.intValue());
 return rowCount.intValue();
 }
 /**
 * Unused rudiment from old JSF staff.
 */
 @Override
 public void setWrappedData(Object data) {
 throw new UnsupportedOperationException();
 }
 /**
 * This is helper method that is called by framework after model update. In must delegate actual database update to
 * Data Provider.
 */
 @Override
 public void update() {
 Bean.update();
 }
 @SuppressWarnings("unchecked")
 @Override
 public Object getRowData() {
 hash = new Hashtable();
 try{
 result.beforeFirst();
 for (int i = 0; i <=currentPk; i++, result.next());
 ResultSetMetaData rd = result.getMetaData();
 int count = rd.getColumnCount();
 for(int i=1;i<=count;i++)
 {
 hash.put(rd.getColumnName(i),result.getString(i));
 }
 System.out.println("hashTable:"+hash);
 }catch (SQLException e) {
 e.printStackTrace();
 }
 return hash;
 }
 @Override
 public int getRowIndex() {
 // TODO Auto-generated method stub
 return 0;
 }
 @Override
 public Object getWrappedData() {
 // TODO Auto-generated method stub
 return null;
 }
 @Override
 public boolean isRowAvailable() {
 // TODO Auto-generated method stub
 return currentPk != null;
 }
 @Override
 public void setRowIndex(int arg0) {
 // TODO Auto-generated method stub
 }
 }
- 
        3. Re: problem with dataTable in firefox3nbelaevski Jun 3, 2009 5:37 AM (in response to gana)How is "tagTable" class defined? 
- 
        4. Re: problem with dataTable in firefox3gana Jun 3, 2009 5:55 AM (in response to gana)Hi, 
 Here is my tagtable class:
 table.tagTable
 {
 border: 1px solid #797997;
 border-collapse: separate;
 }
 table.tagTable th,
 table.tagTable th.sorted
 {
 background-color:#EEEEEE;
 border-bottom:1px solid #797997;
 border-right:1px solid #C0C0C0;
 padding:1px 3px 1px 3px;
 white-space:nowrap;
 text-align: left;
 color: #000066;
 }
 table.tagTable th.sorted
 {
 background-color:#CFCFCF;
 }
 table.tagTable td
 {
 border-right: #C0C0C0 1px solid;
 border-top: #F2F2F2 1px solid;
 border-left: #C0C0C0 0px solid;
 border-bottom: #797997 0px solid;
 color: #000000;
 padding:1px 3px 1px 3px;
 }
 table.tagTable tr.odd
 {
 background: #E6E6E6;
 }
 table.tagTable tr.even
 {
 background-color: #F2F2F2
 }
- 
        5. Re: problem with dataTable in firefox3ilya_shaikovsky Jun 3, 2009 6:35 AM (in response to gana)Visit 
 http://localhost:8080/richfaces-demo/richfaces/sortingFeature.jsf?c=sorting&tab=usage
 click at last dataScroller page.
 Looks like problem within your model.
- 
        6. Re: problem with dataTable in firefox3nbelaevski Jun 3, 2009 6:39 AM (in response to gana)So, the issue is in your CSS - browsers treat empty rows/cells differently. 
- 
        7. Re: problem with dataTable in firefox3nbelaevski Jun 3, 2009 6:46 AM (in response to gana)I assume, model returns artificial no data rows by intentional design and not because of the coding error. Why not use "lastPageMode" attribute of rich:datascroller instead? 
- 
        8. Re: problem with dataTable in firefox3gana Jun 3, 2009 10:34 AM (in response to gana)Hi, 
 First of all thanks for your response.
 And There is no problem with CSS class. I checked without my css class also it was the same case as earlier. I am sending the screenshot of my output. please find below.
 [img]http://localhost:8080/calypso-showcase/html/tableLazyLoading/dataTable.jsf[/img]
 [/url]
- 
        9. Re: problem with dataTable in firefox3nbelaevski Jun 3, 2009 12:23 PM (in response to gana)Screenshot url is wrong :( 
- 
        10. Re: problem with dataTable in firefox3gana Jun 3, 2009 1:15 PM (in response to gana)Hi, 
 I could not send the image. But is there any property for not showing the empty rows in richfaces dataTable. Because i have seen one property called dr-cell:show in firebug. So is there any property like this has to be set? And i am facing this problem only in firefox not in IE.
 Thanks in Advance,
 Gana.
- 
        11. Re: problem with dataTable in firefox3nbelaevski Jun 3, 2009 9:16 PM (in response to gana)Here is what I get for both browsers using the posted code: . Both tables have empty space in the end: is it the problem you are referring to? 
- 
        12. Re: problem with dataTable in firefox3gana Jun 4, 2009 4:02 AM (in response to gana)Hi, 
 Exactly same problem which i am facing. Do you have any soulution for this.?
 Thanks in Advance,
 Gana.
- 
        13. Re: problem with dataTable in firefox3nbelaevski Jun 4, 2009 5:20 AM (in response to gana)Yes, your data model seems to be generating no data cells, that's why there's space in the end. Fix it so there are no such cells. 
- 
        14. Re: problem with dataTable in firefox3gana Jun 4, 2009 5:27 AM (in response to gana)Hi, 
 I did not understand your answer.
 Could you please tell me how will we generate the data cells in the model.
 Thanks in Advance,
 Gana.
 
     
    