Java交流空間

          共同夢想,一起飛翔,明天更美好!

           

          struts實現分頁管理

          這近做個學校網站,用struts寫的,所以把其中分頁討論下,在做之前我們的頭腦中要有一個大概的框架:也就是我們怎么樣來劃分各個功能模塊。一般來說一個分頁功能框架至少要包含如下幾個部分(java class)(括號注釋對應本實例中的類):
          1:頁面元素(Order.java)。也就是一個頁面要顯示的一條條的記錄
          2:數據(DataCollection.java)。對應一個javaBean,我看有不少前輩將獲取數據與頁面控制放在一起,
          我本人認為這樣做不好。一來邏輯不清楚,二來對于一個控制來說應是可重用的,但放在一起就不能重用了。
          3:頁面頁面控制(PageController.java)。也就是對一個頁面的定義
          4:頁面跳轉的Action(PageAction.java).因為這個頁面跳轉相對來說比較簡單我們可以直接繼承ActionForward
          來達到這個目的。
          5:用來顯示的View.(page.jsp)
          *********************************
          注:本實例是從一個客戶定單中取數據
          *********************************

          下面的我就各個部分作一個簡單的介紹
          1:頁面元素。也就是一個頁面要顯示的一條條的記錄(Order.java)
          這個Order.java沒有多大意思它只是一個“定單”的定義
                  private int orderID;           定單編號
                  private String customerID;        客戶編號
                  private Date orderDate;                下單日期
          ***********************************************************
          /*
          * Created on 2004-9-14
          *
          * TODO To change the template for this generated file go to
          * Window - Preferences - Java - Code Style - Code Templates
          */
          package com.toad.pub;
          import java.util.Date;
          /**
          * @author Administrator
          *
          * TODO To change the template for this generated type comment go to
          * Window - Preferences - Java - Code Style - Code Templates
          */
          public class Order {

                  private int orderID;                
                  private String customerID;
                  private Date orderDate;
                  /**
                   *
                   */
                  public Order() {
                          // TODO Auto-generated constructor stub
                  }
                  /**
                   * @param orderID
                   * @param customerID
                   * @param orderDate
                   */
                  public Order(int orderID, String customerID, Date orderDate) {
                          this.orderID = orderID;
                          this.customerID = customerID;
                          this.orderDate = orderDate;
                  }
                  /**
                   * @return Returns the customerID.
                   */
                  public String getCustomerID() {
                          return customerID;
                  }
                  /**
                   * @param customerID The customerID to set.
                   */
                  public void setCustomerID(String customerID) {
                          this.customerID = customerID;
                  }
                  /**
                   * @return Returns the orderDate.
                   */
                  public Date getOrderDate() {
                          return orderDate;
                  }
                  /**
                   * @param orderDate The orderDate to set.
                   */
                  public void setOrderDate(Date orderDate) {
                          this.orderDate = orderDate;
                  }
                  /**
                   * @return Returns the orderID.
                   */
                  public int getOrderID() {
                          return orderID;
                  }
                  /**
                   * @param orderID The orderID to set.
                   */
                  public void setOrderID(int orderID) {
                          this.orderID = orderID;
                  }
          ***********************************************************
          2:數據(DataCollection.java).這個部分有您可以依據個人情況來進行
          自定義。我已有的環境中是用的連接池.
                  private ArrayList list;  用來存放所查詢到的數據
                  private Connection con; 代表一個數據庫連接。這個連接
          是通過<jsp:setProperty../>傳過來的。在接下來的view中我會作介紹
          ***********************************************************
          /*
          * Created on 2004-9-15
          *
          * TODO To change the template for this generated file go to
          * Window - Preferences - Java - Code Style - Code Templates
          */
          package com.toad.pub;
          import java.sql.Connection;
          import java.sql.PreparedStatement;
          import java.sql.ResultSet;
          import java.sql.SQLException;
          import java.util.ArrayList;
          import java.util.Date;
          /**
          * @author Administrator
          *
          * TODO To change the template for this generated type comment go to
          * Window - Preferences - Java - Code Style - Code Templates
          */
          public class DataCollection {

                  private ArrayList list;
                  private Connection con;
                  /**
                   *
                   */
                  public DataCollection() {
                          list=new ArrayList();
                  }
                  /**
                   * @return Returns the con.
                   */
                  public Connection getCon() {
                          return con;
                  }
                  /**
                   * @param con The con to set.
                   */
                  public void setCon(Connection con) {
                          this.con = con;
                  }
                  /**
                   * @return Returns the list.
                   */
                  public ArrayList getList() {
                          return list;
                  }
                  /**
                   * @param list The list to set.
                   */
                  public void setList() {
                          
                          if(this.con==null){
                                  System.out.println("con is null!");
                                  return;
                          }
                          String syntax="select orderid,customerid,orderdate from orders order by orderid asc";
                          int orderID=0;
                          String customerID=null;
                          Date orderDate=null;
                          ResultSet rs=null;
                          PreparedStatement pst=null;
                          try{
                                  pst=con.prepareStatement(syntax);
                                  rs=pst.executeQuery();
                                  while(rs.next()){
                                          orderID=rs.getInt(1);
                                          customerID=rs.getString(2);
                                          orderDate=rs.getDate(3);
                                          list.add(new Order(orderID,customerID,orderDate));
                                  }
                          }catch(SQLException e){
                                  System.out.println("SQLException occur at fetch datas !");
                          }finally{
                                  try{
                                          rs.close();
                                          con.close();
                                  }catch(SQLException e){
                                          System.out.println("SQLException occur at rs and con close() !");
                                  }
                          }
                  }
          }
          ***********************************************************
          3:頁面頁面控制(PageController.java)
                  private ArrayList allItems;        保存DataCollection中的list,也就是所有的數據
                  private int pageNumber;                當前頁的頁號
                  private int lastIndexOfPage;        當前頁的最后一個item(Order)在allItems中的index
                  private int itemsPerPage;        每一頁的容量
                  private int itemsInPage;        當前頁的實際items(orders)
                  private int lastPageNumber;        為allItems/iemsPerPage or allItems/iemsPerPage+1
                  private boolean hasPrevious;        是否為第一頁
                  private boolean hasNext;        是來為最后一頁
          ***********************************************************
          /*
          * Created on 2004-9-14
          *
          * TODO To change the template for this generated file go to
          * Window - Preferences - Java - Code Style - Code Templates
          */
          package com.toad.pub;
          import java.util.ArrayList;

          /**
          * @author Administrator
          *
          * TODO To change the template for this generated type comment go to
          * Window - Preferences - Java - Code Style - Code Templates
          */
          public class PageController {
                  
                  private int pageNumber;
                  private int lastIndexOfPage;
                  private int itemsPerPage;
                  private int itemsInPage;
                  private int lastPageNumber;
                  private boolean hasPrevious;
                  private boolean hasNext;
                  private ArrayList allItems;
                  /**
                   * @return Returns the allItems.
                   */
                  public ArrayList getAllItems() {
                          return allItems;
                  }
                  /**
                   * @param allItems The allItems to set.
                   */
                  public void setAllItems(ArrayList allItems) {
                          this.allItems = allItems;
                  }
                  /**
                   * @return Returns the hasNext.
                   */
                  public boolean isHasNext() {
                          return hasNext;
                  }
                  /**
                   * @param hasNext The hasNext to set.
                   */
                  public void setHasNext() {
                          int items=pageNumber*itemsPerPage;
                          if(items>=allItems.size()){
                                  this.hasNext =false;
                          }else{
                                  this.hasNext=true;
                          }
                  }
                  /**
                   * @return Returns the hasPrevious.
                   */
                  public boolean isHasPrevious() {
                          return hasPrevious;
                  }
                  /**
                   * @param hasPrevious The hasPrevious to set.
                   */
                  public void setHasPrevious() {
                          if(pageNumber==1){
                                  this.hasPrevious=false;
                          }else{
                                  this.hasPrevious=true;
                          }
                  }
                  /**
                   * @return Returns the itemsInPage.
                   */
                  public int getItemsInPage() {
                          return this.itemsInPage;
                  }
                  /**
                   * @param itemsInPage The itemsInPage to set.
                   */
                  public void setItemsInPage() {
                          int temp=pageNumber*itemsPerPage;
                          if(temp<=allItems.size()){
                                  this.itemsInPage=itemsPerPage;
                          }else{
                                  this.itemsInPage=( allItems.size() - ((pageNumber-1)*itemsPerPage ));
                          }
                  }
                  /**
                   * @return Returns the itemsPerPage.
                   */
                  public int getItemsPerPage() {
                          return itemsPerPage;
                  }
                  /**
                   * @param itemsPerPage The itemsPerPage to set.
                   */
                  public void setItemsPerPage(int itemsPerPage) {
                          this.itemsPerPage = itemsPerPage;
                  }
                  /**
                   * @return Returns the pageNumber.
                   */
                  public int getPageNumber() {
                          return pageNumber;
                  }
                  /**
                   * @param pageNumber The pageNumber to set.
                   */
                  public void setPageNumber(int pageNumber) {
                          this.pageNumber = pageNumber;
                  }
                  
                  /**
                   * @return Returns the lastIndexOfPage.
                   */
                  public int getLastIndexOfPage() {
                          return lastIndexOfPage;
                  }
                  /**
                   * @param lastIndexOfPage The lastIndexOfPage to set.
                   */
                  public void setLastIndexOfPage() {
                          this.lastIndexOfPage =(pageNumber -1)*itemsPerPage;
                  }
                  
                  /**
                   * @return Returns the lastPageNumber.
                   */
                  public int getLastPageNumber() {
                          return lastPageNumber;
                  }
                  /**
                   * @param lastPageNumber The lastPageNumber to set.
                   */
                  public void setLastPageNumber() {
                          if(allItems.size()%itemsPerPage==0){
                                  this.lastPageNumber =allItems.size()/itemsPerPage;
                          }else{
                                  this.lastPageNumber =allItems.size()/itemsPerPage+1;
                          }
                  }
          }
          ***********************************************************
          4:頁面跳轉的Action(PageAction.java).
          請注意PageAction是直接繼承于ActionForward
          很簡單:就是根據action=arg2.getParameter("action").trim();
          的返回值來設定pageNubmer和與之相就的設定。
          一定不能忘了調用 return super.execute(arg0, arg1, arg2, arg3);
          ***********************************************************
          /*
          * Created on 2004-9-14
          *
          * TODO To change the template for this generated file go to
          * Window - Preferences - Java - Code Style - Code Templates
          */
          package com.toad.pub;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.http.HttpSession;

          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import org.apache.struts.actions.ForwardAction;
          import com.toad.pub.PageController;

          /**
          * @author Administrator
          *
          * TODO To change the template for this generated type comment go to
          * Window - Preferences - Java - Code Style - Code Templates
          */
          public class PageAction extends ForwardAction {
                  
                  /* (non-Javadoc)
                   * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
                   */
                  public ActionForward execute(ActionMapping arg0, ActionForm arg1,
                                  HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
                          // TODO Auto-generated method stub
                          String action=null;
                          HttpSession session=arg2.getSession(true);
                          action=arg2.getParameter("action").trim();
                          PageController controller=(PageController)session.getAttribute("controller");
                          int pageNumber=controller.getPageNumber();
                          if(action.compareToIgnoreCase("next")==0){
                                  ++pageNumber;
                          }else if(action.compareToIgnoreCase("pervious")==0){
                                  --pageNumber;
                          }else if(action.compareToIgnoreCase("first")==0){
                                  pageNumber=1;
                          }else if(action.compareToIgnoreCase("last")==0){
                                  pageNumber=controller.getLastPageNumber();
                          }
                          controller.setPageNumber(pageNumber);
                          controller.setHasNext();
                          controller.setHasPrevious();
                          controller.setItemsInPage();
                          controller.setLastIndexOfPage();
                          return super.execute(arg0, arg1, arg2, arg3);
                  }
          }
          ***********************************************************
          5:用來顯示的View.(page.jsp)
          ***********************************************************
          <%@ page language="java" %>
          <%@ taglib prefix="html" uri="/WEB-INF/struts-html.tld"%>
          <%@ taglib prefix="bean" uri="/WEB-INF/struts-bean.tld"%>
          <%@ taglib prefix="logic" uri="/WEB-INF/struts-logic.tld"%>
          //得到連接池對象
          <bean:define id="conpool" name="pool" type="com.toad.util.ConnectionPool"></bean:define>
          //定義一個javaBean同時設定數據(<% Data.setList();%>)
          <jsp:useBean id="Data" class="com.toad.pub.DataCollection" scope="session">
                  <jsp:setProperty name="Data" property="con" value="<%=conpool.getcon()%>"/>
                  <% Data.setList();%>
          </jsp:useBean>
          //定義一個PageController同時進行初始化請注意調用順序!
          <logic:notEmpty name="Data" property="list">
                  <jsp:useBean id="controller" class="com.toad.pub.PageController" scope="session">
                      <jsp:setProperty name="controller" property="allItems" value="<%=Data.getList()%>"/>
                          <jsp:setProperty name="controller" property="itemsPerPage" value="20"/>
                          <jsp:setProperty name="controller" property="pageNumber" value="1"/>
                          <%
                                  controller.setHasNext();
                                  controller.setHasPrevious();
                                  controller.setItemsInPage();
                                  controller.setLastIndexOfPage();
                                  controller.setLastPageNumber();
                          %>
                  </jsp:useBean>
          </logic:notEmpty>

          <!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
          <html>
          <head>
          <title>Lomboz JSP</title>
          </head>
          <body bgcolor="#FFFFFF">
          <%int i=0;%>
          Page Number:<bean:write name="controller" property="pageNumber" />
          <table width="100%">
          <tr>
          <th align='left'>Row Number</th>
          <th align='left'>Order ID</th>
          <th align='left'>Customer ID</th>
          <th align='left'>Order Date</th>
          </tr>
          <logic:present name="controller" scope="session">
                  <bean:define id="offset" name="controller" property="lastIndexOfPage" type="Integer"></bean:define>
                  <bean:define id="length" name="controller" property="itemsInPage" type="Integer"></bean:define>
                  <logic:iterate id="order" name="controller" property="allItems" offset="<%=offset.toString()%>" length="<%=length.toString()%>" type="com.toad.pub.Order">
                          <tr>
                          <td><%=++i%></td>
                          <td><bean:write name="order" property="orderID" /></td>
                          <td><bean:write name="order" property="customerID" /></td>
                          <td><bean:write name="order" property="orderDate" /></td>
                          </tr>
                  </logic:iterate>
                  
                  <tr>
                  <logic:notEqual name="controller" value="1" property="pageNumber" >
                  <td><html:link page="/pageaction.do?action=first">First</html:link></td>
                  </logic:notEqual>
                  <logic:equal name="controller" property="hasPrevious" value="true">
                  <td><html:link page="/pageaction.do?action=pervious">Previous</html:link></td>
                  </logic:equal>

                  <logic:equal name="controller" property="hasNext" value="true">
                  <td><html:link page="/pageaction.do?action=next">Next</html:link></td>
                  </logic:equal>

                  <bean:define id="lastpagenumber" name="controller" property="lastPageNumber" type="Integer"></bean:define>
                  <logic:notEqual name="controller" property="pageNumber" value="<%=lastpagenumber.toString()%>"  >
                  <td><html:link page="/pageaction.do?action=last">Last</html:link></td>
                  </logic:notEqual>
                  
                  </tr>
          </logic:present>
          </table>
          </body>
          </html>
          **************************************************************

          posted on 2008-10-15 18:49 郭旺平 閱讀(138) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案(2)

          文章檔案(2)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 玉山县| 剑阁县| 奉节县| 葵青区| 罗田县| 高平市| 潜山县| 南城县| 洛阳市| 郎溪县| 鹤岗市| 封开县| 甘洛县| 湛江市| 兴城市| 肇州县| 丘北县| 江都市| 酉阳| 山东省| 柏乡县| 三亚市| 黔西| 普兰店市| 淮滨县| 亚东县| 南和县| 塔河县| 五大连池市| 中江县| 德格县| 昭觉县| 天柱县| 加查县| 察隅县| 封开县| 靖江市| 大名县| 老河口市| 四平市| 通州区|