FYI, the JSTL equivalent:
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;
private Result result;
public PagedTableBean(Connection conn,
String sql,
long pageNumber,
long pageSize) throws PagedTableException {
this.pageNumber = pageNumber;
this.pageSize = pageSize;
this.conn = conn;
this.sql = sql;
populateBean();
}
private void populateBean() throws PagedTableException {
long startRow = (((pageNumber-1)*pageSize)+1);
long endRow = (pageNumber*pageSize);
String q = "SELECT * FROM (SELECT ROWNUM ROWNO, Q.* "
+ "FROM (" + sql + ") Q WHERE ROWNUM <= "
+ endRow + ") WHERE ROWNO >= " + startRow;
try {
PreparedStatement ps = conn.prepareStatement(q);
ResultSet rs = ps.executeQuery();
this.result = ResultSupport.toResult(rs);
rs.close();
ps.close();
} catch(SQLException e) {
throw new PagedTableException(e.getMessage());
}
}
public Map[] getRows() {
return this.result.getRows();
}
public Object[][] getRowsByIndex() {
return this.result.getRowsByIndex();
}
public String[] getColumnNames() {
return this.result.getColumnNames();
}
public int getRowCount() {
return this.result.getRowCount();
}
<bean:define id="results" name="<%= Constants.RESULT_KEY %>" scope="request"/>
<c:forEach var="record" items="${results.rows}">
<c:out value="${record.item_number}">
Your item number wasn't provided.
</c:out>
</c:forEach>
Quoting "CRANFORD, CHRIS" <[EMAIL PROTECTED]>:
> I don't use the display tags so couldn't tell you. I simply define by bean
> using the struts bean:define tag and then access my bean's properties using
> the bean:write method or logic taglibs. For example, my table contains a
> field called item_number. I access it like as follows:
>
> <bean:define id="results" name="<%=Constants.RESULT_KEY%>" scope="request"/>
> <logic:iterate id="record" name="results" property="rows">
> <logic:empty name="record" property="item_number">
> Your item number wasn't provided.
> </logic:empty>
> <logic:notEmpty name="record" property="item_number">
> <bean:write name="record" property="item_number"/>
> </logic:notEmpty>
> </logic:iterate>
>
> Does this make sense?
> Chris
>
> -----Original Message-----
> From: Rajat Pandit, Gurgaon [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, June 15, 2004 2:49 AM
> To: 'Struts Users Mailing List'
> Subject: RE: RowSetDynaClass
>
>
> Hey Chris,
> Thanks a lot for the detailed information. I have just one more issue, I
> have used the RowSetDynaClass (beanutils.jar) and I had this issue where I
> couldn't control the position of the column numbers as in the 2 column in
> the sql could be anywhere in the resultset returned. I was passing the
> collection object back to the display tag. Maybe it internally stores the
> metadata information in a Map, or is it something wrong with my
> understanding. Do let me know if you have had any such issues before?
> Regards rajat
>
> -----Original Message-----
> From: CRANFORD, CHRIS [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, June 15, 2004 11:46 AM
> To: 'Struts Users Mailing List'
> Subject: RE: RowSetDynaClass
>
>
> The PagedTableAction class I'm using don't do any client-side or JVM caching
> because the data could change relatively quickly depending on the nature of
> our business. Thus, for us, letting the database handle the "subset" rownum
> limits works well and is very efficient. Right now I can return any subset
> of data from a table that contains over 75000 records within < 2 seconds ..
> And that's on pagesize ~ 100/150 or so.
>
> Take care,
> chris
>
> -----Original Message-----
> From: Rajat Pandit, Gurgaon [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, June 15, 2004 2:10 AM
> To: 'Struts Users Mailing List'
> Subject: RE: RowSetDynaClass
>
>
> Hey navjot,
> Thanks for the inputs(any pointers to the documentations (URL) would again
> be of great help) I have been pretty happy using the display tag, for small
> record sets (about 12000 or so) but I needed something more in case I needed
> to customize the pagination stuff. Like caching stuff etc.
> Any pointers?
> Rajat
> (OT (only for navjot) ps: any clue where amit malhotra is these days?)
>
>
> -----Original Message-----
> From: Navjot Singh [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, June 15, 2004 11:38 AM
> To: Struts Users Mailing List
> Subject: Re: RowSetDynaClass
>
> if that was really a problem for you, then there could any/both of 2
> reasons.
>
> 1. You never used ValueListHandler pattern.
> 2. You never had used any pager taglib.
>
> and Chris, you could also look into *sql* JSTL that can help you doing
> what you want. And probabaly i recommend using this only for quick
> reports generation.
>
> <navjot/>
>
>
> Rajat Pandit, Gurgaon wrote:
>
> > Hey Chris,
> > This seems like a pretty neat solution you have out here, could please
> > explain this, as pagination stuff is kind of the most complicated
> > things that I have to deal with and I see my self coding the same
> > thing again and again over a period of time. I would really appreciate
> > your time and effort. Thanks in adv.
> > rajat
> >
> > -----Original Message-----
> > From: CRANFORD, CHRIS [mailto:[EMAIL PROTECTED]
> > Sent: Tuesday, June 15, 2004 11:17 AM
> > To: 'Struts Users Mailing List'
> > Subject: RE: RowSetDynaClass
> >
> > Found the answer ;-) ... Avoid the <c:...> tags all together and stick
> with
> > the standard struts tags. The following worked:
> >
> > <logic:iterate id="row" name="results" property="rows" scope="request"
> > indexId="rowid">
> > <bean:write name="row" property="item_id" /> - <bean:write
> > name="row" property="item_product_number"/> </logic:iterate>
> >
> > Now have a fast, efficient paging mechanism that permits me to pass in
> > a database connection object, the sql query to execute, starting page
> > # and size and it handles the rest by populating itself from the
> > database,
> closing
> > the resultset when finished and leaves the presentation part up to my
> > JSP
> as
> > above!
> >
> > Gotta love struts!
> > Chris
> >
> > -----Original Message-----
> > From: CRANFORD, CHRIS [mailto:[EMAIL PROTECTED]
> > Sent: Tuesday, June 15, 2004 12:35 AM
> > To: '[EMAIL PROTECTED]'
> > Subject: RowSetDynaClass
> >
> >
> > I am storing a RowSetDynaClass property in my java class and I have
> > implemented a method on my class as follows:
> >
> > public Collection getRows() {
> > return((Collection)rsdc.getRows());
> > }
> >
> > In my action, I store my custom class object reference as follows:
> > request.setAttribute("results", myResultsObj);
> >
> > Then in my jsp, I do the following:
> > <bean:define scope="request" id="data" name="results" property="rows" />
> > <c:forEach var="row" items="${data}" varStatus="rowid">
> > <c:out value="${rowid.count}"/>. <c:out value="${row.item_id}" />
> > - <c:out value="${row.item_product_number}" />
> > </c:forEach>
> >
> > I get the following error:
> > [ServletException in:/pages/test-body.jsp]
> > An error occurred while evaluating custom action attribute "value"
> > with value "${row.item_id}": Unable to find a value for "item_id" in
> > object of class "org.apache.commons.beanutils.BasicDynaBean" using
> > operator "."
> (null)
> >
> > Can someone tell me what I am doing wrong here and how I can do this
> > properly to get it to work?
> >
> > _______________________________________________________
> > Chris Cranford
> > Programmer/Developer
> > SETECH Inc. & Companies
> > 6302 Fairview Rd, Suite 201
> > Charlotte, NC 28210
> > Phone: (704) 362-9423, Fax: (704) 362-9409, Mobile: (704) 650-1042
> > Email: [EMAIL PROTECTED]
--
Kris Schneider <mailto:[EMAIL PROTECTED]>
D.O.Tech <http://www.dotech.com/>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]