-
1. Re: problem with dataTable in firefox3
nbelaevski Jun 3, 2009 5:03 AM (in response to gana)Hi Gana,
Post page code. -
2. Re: problem with dataTable in firefox3
gana 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 firefox3
nbelaevski Jun 3, 2009 5:37 AM (in response to gana)How is "tagTable" class defined?
-
4. Re: problem with dataTable in firefox3
gana 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 firefox3
ilya_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 firefox3
nbelaevski 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 firefox3
nbelaevski 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 firefox3
gana 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 firefox3
nbelaevski Jun 3, 2009 12:23 PM (in response to gana)Screenshot url is wrong :(
-
10. Re: problem with dataTable in firefox3
gana 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 firefox3
nbelaevski 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 firefox3
gana 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 firefox3
nbelaevski 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 firefox3
gana 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.