<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产AV无码专区亚洲AV麻豆丫| 国产成人A人亚洲精品无码| 亚洲制服丝袜精品久久| 一级毛片免费观看不卡视频| 亚洲AV永久无码精品一百度影院| 成人av片无码免费天天看| 亚洲色无码专区在线观看| 二个人看的www免费视频| 亚洲AV永久无码精品水牛影视| 99久久国产精品免费一区二区| 亚洲成人精品久久| 免费人成在线观看69式小视频| 亚洲入口无毒网址你懂的| 免费激情视频网站| 黄色a三级三级三级免费看| 亚洲午夜精品一级在线播放放| 黄视频在线观看免费| 亚洲视频在线观看| 一个人看www在线高清免费看| 亚洲精品理论电影在线观看| 亚洲?V乱码久久精品蜜桃| 91精品成人免费国产| 亚洲一区二区影视| 免费亚洲视频在线观看| 免费观看一区二区三区| 国产色在线|亚洲| 亚洲第一区在线观看| 亚欧日韩毛片在线看免费网站| 亚洲 日韩经典 中文字幕| 九月婷婷亚洲综合在线| 免费91最新地址永久入口| 亚洲免费福利在线视频| 国产av无码专区亚洲国产精品| 91热久久免费精品99| WWW亚洲色大成网络.COM | 天天干在线免费视频| 亚洲一级片免费看| 亚洲乱码一二三四五六区| 亚洲国产精品狼友中文久久久| 9277手机在线视频观看免费| 国产成人 亚洲欧洲|