All the navbar needs to know is:
1. what page am I on?
2. Is this the last page?

Passing the name of the ResultSet is not totally necessary.  In fact, the
statement tag could export a boolean variable "onLastPage" or something to
indicate whether or not to offer a "next" link.  The resultSet tag would set
this to true if it had, indeed, reached the last record, false otherwise.  The
navbar could get this from it's pageContext.

 <jdbc:connection id="conn1">
   <jdbc:url>jdbc:odbc:test</jdbc:url>
   <jdbc:driver>sun.jdbc.odbc.JdbcOdbcDriver</jdbc:driver>
 </jdbc:connection>
 
 <jdbc:statement id="stmt1" conn="conn1">   <!--creates boolean onLastPage-->
   <jdbc:query><%= query %></jdbc:query>
   <jdbc:resultSet id="myRS" loop="true" elementsPerPage="10"
                   pageNumberParam="pgNum"> <!--updates onLastPage-->
         <tr>
         <td><jdbc:getColumn position="3"/></td>
         <td><jdbc:getColumn position="1"/></td>
         </tr>
   </jdbc:resultSet> 
   <jdbc:navbar pageNumberParam="pgNum">    <!--finds onLastPage-->
     <jdbc:prevlink>        <!-- skips if on first page -->
       <a href="thisJspPage?pgNum=<%=previous%>">previous</a>
     </jdbc:prevlink> 
     <jdbc:nextlink>        <!-- skips if on last page -->
       <a href="thisJspPage?pgNum=<%=next%>">next</a>
     </jdbc:nextlink> 
   </jdbc:navbar>
 </jdbc:statement>

Now there's some tag bloat for ya.

-Mark
mark at nullcraft.org


"Ciot, Thierry" wrote:
> 
> The problem is that the result set is removed from page context past
> </jdbc:resultSet>
> thus <jdbc:navbar> cannot call isLast.
> 
> Maybe we need something like this:
> 
> <jdbc:statement id="stmt1" conn="conn1">
>   <jdbc:query><%= query %></jdbc:query>
>   <jdbc:resultSet id="myRS" from="32" to="22">
>         <jdbc:loopResultSet>
>         <tr>
>         <td><jdbc:getColumn position="3"/></td>
>         <td><jdbc:getColumn position="1"/></td>
>         </tr>
>         </jdbc:loopResultSet>
> 
>         <jdbc:navbar resultSet="myRS" pageNumberParam="pgNum">
>           <a href="thisJspPage?pgNum=<%=previous%>">previous</a>
>           <a href="thisJspPage?pgNum=<%=next%>">next</a>
>         </jdbc:navbar>
> 
>   </jdbc:resultSet>
> </jdbc:statement>
> 
> BTW, I prefer a from and to attribute because we can specify a reverse order
> as in the previous example.
> 
> Thierry.
> 
> -----Original Message-----
> From: Mark Howell [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, July 24, 2001 11:59 AM
> To: [EMAIL PROTECTED]
> Subject: Re: DBTags and scrollable result sets
> 
> This might be addressed with a few new attributes:
> 
> elementsPerPage - the number of rows to display per page
> pageNumberParam - the name of the parameter with the current page number
> 
> elementsPerPage would be 10 in this case, and pageNumber would start at 1 by
> default.  You would need some kind of linkage for the user to specify
> another
> page.  Perhaps a separate tag for this, a navigation bar tag.  The nav bar
> would print links to other pages of the result set.  When the user clicked
> on
> one of these links, the pageNumber would be updated.  The next visit to the
> statement tag would execute the same query again.  Within the resultSet tag,
> if a pageNumber parameter were present, use it to determine which page to
> seek
> to.  If a pageNumberParam were not present, then a default of 1 would be
> applied.
> 
> <jdbc:connection id="conn1">
>   <jdbc:url>jdbc:odbc:test</jdbc:url>
>   <jdbc:driver>sun.jdbc.odbc.JdbcOdbcDriver</jdbc:driver>
> </jdbc:connection>
> 
> <jdbc:statement id="stmt1" conn="conn1">
>   <jdbc:query><%= query %></jdbc:query>
>   <jdbc:resultSet id="myRS" loop="true" elementsPerPage="10"
>                   pageNumberParam="pgNum">
>         <tr>
>         <td><jdbc:getColumn position="3"/></td>
>         <td><jdbc:getColumn position="1"/></td>
>         </tr>
>   </jdbc:resultSet>
> </jdbc:statement>
> 
> <jdbc:navbar resultSet="myRS" pageNumberParam="pgNum">
>   <a href="thisJspPage?pgNum=<%=previous%>">previous</a>
>   <a href="thisJspPage?pgNum=<%=next%>">next</a>
> </jdbc:navbar>
> 
> For example, if a request came in with pgNum=4 set, the jdbc:resultSet tag
> would seek to 0-based record: elementsPerPage * (pgNum-1).  In this case,
> 10*(4-1) (=30) would be the first record to display.  elementsPerPage
> iterations through the result set would occur starting from record 30 and
> ending with record 39.
> 
> The navbar checks if myRs.isLast() to see if the end has been reached.  If
> not, then a next value is calculated to be pgNum + 1.  In this case, 5. A
> previous value is calculated as pgNum - 1 or 1 if pgNum <= 1.
> 
> I hope this doesn't just confuse things.
> 
> -Mark Howell
> mark at nullcraft.org
> 
> "Ciot, Thierry" wrote:
> >
> > I would think it is a very useful feature.  Right now I am looking at how
> to
> > display rows using a "paging" mechanism (that is, for example, 10 rows at
> a
> > time).
> >
> > How would you go about doing this with the current tag lib?
> >
> > With scrollable record set we could have something like:
> >
> > <jdbc:connection id="conn1">
> >   <jdbc:url>jdbc:odbc:test</jdbc:url>
> >   <jdbc:driver>sun.jdbc.odbc.JdbcOdbcDriver</jdbc:driver>
> > </jdbc:connection>
> >
> > <jdbc:statement id="stmt1" conn="conn1">
> >   <jdbc:query><%= query %></jdbc:query>
> >   <jdbc:resultSet id="myRS" loop="true" beginat="20" endat="30">
> >         <tr>
> >         <td><jdbc:getColumn position="3"/></td>
> >         <td><jdbc:getColumn position="1"/></td>
> >         </tr>
> >   </jdbc:resultSet>
> > </jdbc:statement>
> >
> > What do you think?
> >
> > Thierry.
> >
> > -----Original Message-----
> > From: Morgan Delagrange [mailto:[EMAIL PROTECTED]]
> > Sent: Monday, July 23, 2001 12:05 AM
> > To: {[EMAIL PROTECTED]; [EMAIL PROTECTED]
> > Subject: Re: DBTags and scrollable result sets
> >
> > Ciot, Thierry wrote on 7/20/01 2:38 pm:
> >
> > >Hi,
> > >
> > >Is there any plan to add
> > >scrollable result sets support
> > >in DBTags?
> > >
> > >Thanks, Thierry.
> >
> > Nothing definite.  :)  That specific feature hasn't actually come up as of
> > yet, but it does sound like a good one.
> >
> > Morgan

Reply via email to