Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Paging a JSP page source code -required URGENT-

Posted on 2001-06-18
8
Medium Priority
?
401 Views
Last Modified: 2007-12-19
Paging a JSP page source code -required URGENT-
I need to paging some JSP pages in 20 item.. I DONT KNOW HOW!
i need a source code as example!
0
Comment
Question by:btretzanor
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 2

Expert Comment

by:bagi112599
ID: 6204119
//    On your JSP page:

       <%
         Vector vClients = (Vector)request.getAttribute("clients");
         int pageNo = Integer.parseInt((String)request.getAttribute("page"));
         int totalPages = Integer.parseInt((String)request.getAttribute("totalPages"));
         int totalCount = Integer.parseInt((String)request.getAttribute("totalCount"));
         boolean hasMorePage = (pageNo < totalPages);

      %>
<FORM name="FORM1" method=post action="/servlets/myServlet">
       <% //-- To hold paging logic -- %>
      <input type=hidden name="page" value="1">

      <center><FONT color=black face=Arial size=2>Search returned <b><%= totalCount %></b> results<% if(vClients.size() != 0) { %> (Page <b><%= pageNo %></b> of <b><%= totalPages %></b>)<%}%></FONT><center><br>

// display l20 customers from vClients:
     <% //--------------------- Table Data -----------------%>
        <%
          // Display message if there were no matches.
          if(vClients.isEmpty()){
            out.println("<TR bgColor=lightgoldenrodyellow>" +
                        "  <TD colspan=8><b><FONT face=Arial size=2>NO CLIENTS MATCHED YOUR SEARCH CRITERIA.</FONT></b></TD>");
          }

          int row=1;
          Iterator it = vClients.iterator();
          while(it.hasNext()){
            cInfo = (BasicClientInfoBean)it.next();
        %>


        <TR bgColor=<%  if ( (row%2) == 1 ) {%>lightgoldenrodyellow
                    <%} else {%>aliceblue <%}%> >
          <TD><jsp:getProperty name="cInfo" property="firstname" />&nbsp;<jsp:getProperty name="cInfo" property="lastname" />
               </TD></TR><%
            row++;
          } // end of while loop


         %><TR>


     //display nav bar at the bottom as:

                       <% if(pageNo>1) { %>
                  <b><FONT face=Arial size=2 color=white>
                  <a href="javascript:onclick=history.back()" onmouseout="window.status='';return true" onmouseover ="window.status='Previous Page';return true">
                  Previous Page</a></FONT></b>
                <%}%>
                <% if(hasMorePage) { %>
                  <% if(pageNo>1) {%>
                    <b>|</b>
                  <%}%>
                  <FONT face=Arial size=2 color=white><b>
                <a href="javascript:onclick=nextPage(<%= pageNo+1 %>)" onmouseout="window.status='';return true" onmouseover ="window.status='Next Page';return true">
                  Next Page</a></b></FONT>
                <%}%>

                &nbsp;
</FORM>
// where nextPage () is javascript on the page:

  function nextPage(page){
    document.FORM1.cmd.value="search";
    document.FORM1.page.value=page;
    document.FORM1.submit();
  }
0
 
LVL 2

Expert Comment

by:bagi112599
ID: 6204152
// in your myServlet:
 int  NUM_PER_PAGE = 20;
 
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      // A vector of BasicClientInfoBean objects.
      Vector vClients = new Vector();

     // Page numbering.
      int page = 1;
      try{
        page = Integer.parseInt(request.getParameter("page"));
      }catch(Exception e){
            // default to 1.
      }

      try{
           sql ="select ....";
           // TODO: get DB connection:
               con = getconnection...;
           Statement stmt = con.createStatement();
          ResultSet  rs = stmt.executeQuery(makeSQL());
           int count=0;
             while(rs.next() ){
                    count ++;
                    //add those client that are on page'th page:
                    if(((page - 1)* NUM_PER_PAGE + 1 <= count) && (count <= page * NUM_PER_PAGE)){
                         BasicClientInfoBean client = new BasicClientInfoBean();
                         client.setFirstName(rs.getString("FirstName"));
                         client.setLastName(rs.getString("LastName"));
                         vClients.add(client);
                    }
               }
      rs.close();
      stmt.close();
          vClients
      }catch(SQLException e){
          System.err.println("GroupServlet ->searchGroup()-> error:" + e.getMessage());
      }

       // Get the number of pages.
      int total = vClients.size();
      int totalPages = (int)Math.ceil((double)total/NUM_PER_PAGE);
      // Set request objects for use in the result screen.
      request.setAttribute("clients", vClients);
      request.setAttribute("page", "" + page);
      request.setAttribute("totalPages", Integer.toString(totalPages));
      request.setAttribute("totalCount", Integer.toString(total));
  }
0
 
LVL 2

Expert Comment

by:bagi112599
ID: 6204156
above code is not pretended to be working, but
it is extracted from my working code and
intended to give you the basic idea.
Hope it helps.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Accepted Solution

by:
rajendra_rathod earned 800 total points
ID: 6205955
Hi,
Here is the JSP pagination I have used for my project. It has used JavaBean to fetch Records from the database.
On JSP page u will see Next and Previous links through which u can navigate.

Processing is as follows
When user first time come to the page the query will be fired and data will be stored in Vector which again consist of vectors.When the user clicks on Next or Previous the index of the vector gets changed and further data will be displayed.This helps us not to contact database again and again for data fetching.
Middle part of the code consist of avoiding the repeatating values to be displayed.

Advantage:
U can define How many Records u like to display?
If no. of records from the database are less than specified in JSP to display then the links will be disabled.

It is some what difficult to understand for the first time but if u go carefully u will understand it since we are using this in our live project to develop reports.

This is the JSP page and below it is the JavaBean

In case of any doubt feel free to contact.
<html>
<head>
<title>Credit Checks Performed</title>
 </head>
<%@ page import = "java.sql.*,java.util.*,ReportBean" errorPage = "error.jsp"%>
<jsp:useBean id = "reportbean" scope = "page" class = "ReportBean"/>

<%!
   int iRows,iRecordNumber,iTotalCount = 0;
   Vector vectInner,vectOuter,vectComparison;
   String strCcDate,strSessionValue,strCustName = "",strNextCustName = "";
   final int iRecOnPage = 25;
   String strDynamicPart,strQuery,strCriteria;
%>
<% int iFlag = 0; %>
<% String strDisplay = ""; %>
<%
      /* This part is executed only once when user first enters. In this depending upon the
            selection criteria vector is populated using ReportBean
      */

      if (request.getParameter("Navigation") != null)
      {
                   
    }
      else
      {
                  vectInner = new Vector();
            vectOuter = new Vector();
                  String  strQuery = " SELECT *  " +
                                                               " FROM " +
                                                               " emp "
                                                               
                  try {
                        vectOuter=reportbean.selectRecords(strQuery);
                        if (vectOuter.isEmpty())
                              iFlag=1;
                        else
                              iFlag=0;
                              
                  } catch (Exception e) {
                        throw new Exception ("Server Error !! Please Try After Some Time");
                  }      
      } // end of (request.getParameter("Navigation")!=null)
%>
<body>
<center>
<h2 class pagetitle>Credit Checks Performed </h2>
<h2 class pagetitle><%= strCriteria %></h2>
<% if (iFlag==0) {%>
                  <table border="1" cellpadding="3" cellspacing="0" id="SearchDisplayTbl" width = "100%">
                  <tr>
                        <TH class=searchdisplay align=left>  Customer Name</TH>
                        <TH class=searchdisplay align=left>  Account No </TH>
                        <TH class=searchdisplay align=left>  DUNNS Number</TH>
                        <TH class=searchdisplay align=left>  Town</TH>
                        <TH class=searchdisplay align=left>  Post Code  </TH>
                        <TH class=searchdisplay align=left>  Country</TH>
                        <TH class=searchdisplay align=left>  Phone No</TH>
                        <TH class=searchdisplay align=left>  SIC </TH>
                        <TH class=searchdisplay align=left>  CC Date</TH>
                        <TH class=searchdisplay align=right>Credit Rating</TH>
                        <TH class=searchdisplay align=right>Credit Limit (in GBP)</TH>

                  </tr>
                  <%    int iCounter = 1;
                              if(request.getParameter("Navigation") != null && request.getParameter("Navigation").equals("Next"))
                              {
                                    iRecordNumber = Integer.parseInt(request.getParameter("number"));
                            } else if(request.getParameter("Navigation")!=null && request.getParameter("Navigation").equals("Previous"))
                                          {
                                                  iRecordNumber=Integer.parseInt(request.getParameter("number"));
                                                      if(iRows==iRecordNumber && iRows%iRecOnPage > 0)
                                                      {
                                                            iRecordNumber= Integer.parseInt(request.getParameter("number"));
                                                      }
                                                      else
                                                      {
                                                            iRecordNumber=iRecordNumber-(2*iRecOnPage);
                                                    }
                                         }
                                          else
                                          {
                                                iRecordNumber=0;            
                                          }
                              while(iRows>iRecordNumber && iCounter<(iRecOnPage+1) ) { %>
                              <tr>
                              <% vectInner=(Vector)vectOuter.elementAt(iRecordNumber);
                                       if (strCustName.equals(vectInner.elementAt(0).toString())) {%>
                                          <% if ((iCounter%iRecOnPage) == 1) {%>
                                                      <td><%=vectInner.elementAt(0) %></td>
                                                      <td><%=vectInner.elementAt(1) %></td>       
                                                      <td><%=vectInner.elementAt(2) %></td>
                                                      <td><%=vectInner.elementAt(3) %></td>       
                                                      <td><%=vectInner.elementAt(4) %></td>
                                                      <td><%=vectInner.elementAt(5) %></td>
                                                      <td><%=vectInner.elementAt(6) %></td>
                                                      <td><%=vectInner.elementAt(7) %></td>
                                          <% } else {%>
                                                <td>&nbsp;</td>
                                                <td>&nbsp;</td>      
                                                <td>&nbsp;</td>
                                                <td>&nbsp;</td>
                                                <td>&nbsp;</td>
                                                <td>&nbsp;</td>
                                                <td>&nbsp;</td>
                                                <td>&nbsp;</td>
                                          <% } %>
                                    <% } else {%>
                                                <td><%=vectInner.elementAt(0) %></td>
                                                <td><%=vectInner.elementAt(1) %></td>       
                                                <td><%=vectInner.elementAt(2) %></td>
                                                <td><%=vectInner.elementAt(3) %></td>       
                                                <td><%=vectInner.elementAt(4) %></td>
                                                <td><%=vectInner.elementAt(5) %></td>
                                                <td><%=vectInner.elementAt(6) %></td>
                                                <td><%=vectInner.elementAt(7) %></td>
                                                <% strCustName = vectInner.elementAt(0).toString(); %>
                                    <% } %>
                                    <% strCcDate = vectInner.elementAt(8).toString(); %>
                                    <td><%=strCcDate%></td>
                                    <td align = right><%=vectInner.elementAt(9) %></td>
                                  <td align = right><%=vectInner.elementAt(10) %></td>
                                    <% if (iRows > iRecordNumber +1)
                                           {
                                                vectComparison = (Vector)vectOuter.elementAt(iRecordNumber+1);
                                                strNextCustName = vectComparison.elementAt(0).toString();
                                           }
                                           else
                                           {
                                                strNextCustName ="";
                                           }
                                          if (!strCustName.equals(strNextCustName)) {%>
                                                </tr><tr>
                                                      <td colspan = 11 >&nbsp;</td>
                                    <% }      
                                             if((iCounter==1))
                                                       strDisplay=strDisplay+"Records  "+(iRecordNumber+1);
                                               if(iCounter==iRecOnPage)
                                             {
                                                      strDisplay=strDisplay+" to  "+(iRecordNumber+1)+" of "+iRows;
                                                      out.println(strDisplay);
                                             }
                                                if ((iRecordNumber==(iRows-1))&&(iCounter!=iRecOnPage))
                                              {
                                                      strDisplay=strDisplay+" to  "+(iRecordNumber+1)+" of "+iRows;
                                                      out.println(strDisplay);
                                                }
                                            iCounter++;
                                            iRecordNumber++;
                                      </tr>
                  <% } // end of while loop %>
                  <br>
                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                  <% if(iRows > iRecordNumber) {%>
                         <a href = "Details.jsp?Navigation = Next&number=<%=iRecordNumber %>">Next</a>
                  <% } else { %>
                              <font size = 2 color = "c0c0c0">Next</font>
                  <% } %>
                  <% if(iRecordNumber > iRecOnPage) {%>
                        <a href = "Details.jsp?Navigation = Previous&number=<%=iRecordNumber %>">Previous</a>
                  <% } else { %>
                              <font size = 2 color = "c0c0c0">Previous</font>
                  <% } %>
                  </tr>
                  </table>
                  </center>
<%} else {%>
            <h1>No Records to Display </h1>
<% } // end of if (iFlag==0) %>
</body>
</html>

The ReportBean is as follows
import java.sql.*;
import java.util.*;


public class ReportBean {
      private Connection pvt_conn;

/**
       * method selectRecords(String argQuery)-It takes input query.
       *@return It returns Vector
       *@param argQuery Takes Query as input.
 */

      public java.util.Vector  selectRecords(String argQuery) throws Exception
      {
            ResultSet l_rs=null;
            ResultSetMetaData l_meta = null;
            java.util.Vector vv_rows = new java.util.Vector();
            try{
                  System.out.println("**************Before Connection**************");
                  pvt_conn = DriverManager.getConnection();
                  System.out.println("**************After Connection**************");
                  Statement l_stmt = pvt_conn.createStatement();
                  System.out.println("**************After Create Startement**************");
                  l_rs = l_stmt.executeQuery(argQuery);
                  System.out.println("*************Query Executed Properly************");
                  l_meta = l_rs.getMetaData();
                  System.out.println("*************Got Meta Data *****************");
                  int l_columnCount = l_meta.getColumnCount();
                  System.out.println("************** No of Columns ************* " + l_columnCount);
                  int m = 0;

                  while(l_rs.next()) {
                        java.util.Vector v_row = new java.util.Vector();
                        for(int n = 1 ; n <= l_columnCount ;n++) {
                              v_row.addElement(l_rs.getObject(n));
                        //      System.out.println("******Value of *****"+ n + "is [" + l_rs.getString(n)+ "]");
                        }
                        vv_rows.addElement(v_row);
                        m++;
                     //System.out.println("*********** Total No of Records fetch ************" + m);
                  }
                  System.out.println("*********** out of while loop ************");
                   l_stmt.close();
                   l_rs.close();
                   pvt_conn.close();
            }
            catch(Exception e){
                  throw new Exception();
            }
            return vv_rows;
      }
}
0
 

Expert Comment

by:jason101799
ID: 6254445
Rajendra,

I face this error when i view this page in the browser. It says

Error
-----

"[05/Jul/2001:13:50:36] warning (26668): JSP compilation error: java.lang.Excepti
on: JSP parse error (line 6) - USEBEAN tag is invalid, stack: java.lang.Exceptio
n: JSP parse error (line 6) - USEBEAN tag is invalid"                  

-----------------------------------------------------------
What's wrong with the bean? What is the iRows for? In your while statement you specify that the iRows must be > than the iRecordsNumber but you initiate the iRows = 0 at the beginning and it was never incremented.

Please help.

Thanks
Jason (clkong@apis.dhl.com)
U can email meif u wish to
0
 
LVL 2

Expert Comment

by:bagi112599
ID: 6256099
jason,
did you try mine?
0
 

Expert Comment

by:jason101799
ID: 6258125
bagi,

Nope, I have not try yours. But I actually manage to modified rajendra's code without using the bean and it works.

Cheers
Jason
0
 
LVL 5

Expert Comment

by:Netminder
ID: 6821910
Force/accepted by

Netminder
Community Support Moderator
Experts Exchange

jason/btrezanor:

Having two accounts is a specific violation of the Membership agreement, and the fact that you abandoned a number of questions in one account and have a number of abandoned questions in the second makes the offense more egregious. You will be contacted by Admin.

0

Featured Post

The top UI technologies you need to be aware of

An important part of the job as a front-end developer is to stay up to date and in contact with new tools, trends and workflows. That’s why you cannot miss this upcoming webinar to explore the latest trends in UI technologies!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
The viewer will learn how to implement Singleton Design Pattern in Java.
Suggested Courses

721 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question