struts分页

来源:互联网 发布:电信断网通知 编辑:程序博客网 时间:2024/04/30 07:31
 近来了解了一下struts2.0  觉得这个分页比较有用,贴于此处:
 
环境是JDK1.6+mysql5.0+jboss4.0+struts 2.0.11

主要有三个东西:show.jsp、ShowAction.java、PageInformation.java

还需完善的地方:如果没有前一页、后一页,直接把这个链接在页面上屏蔽掉

 因为不想在Action里面有太多的链接数据库的代码,所以另外搞了一个PageInformation类,来完成数据库查询工作。

具体代码如下:

package com.ClockWise.ray.jsp;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;



public class PageInformation {

             private int pageSize;//每一页包含的条目个数

             private int totalRows;//一共有多少行

             private int totalPages;//一共有多少页

            

             private int currentPage=1;//初始化当前页为第一页

             private boolean hasPrevious = false;//是否有前页,尚未使用,有待完善

             private boolean hasNext = false;//是否有后页,尚未使用,有待完善

            

             private ArrayList<User> list = new ArrayList<User>();//存放结果的列表

             private DatabaseGeneralServices dgs;//自己写的获得connection的类,可以自己实现

             private Connection conn;          

             private PreparedStatement ps;

             private ResultSet rs;

            

             public PageInformation(){

              dgs = DatabaseGeneralServices.getInstance();

             pageSize = 20;//每页设置为20条

             totalRows = initRowCount();//得到总行数,比较粗犷,不知有什么灵巧的方法,比如select count(*)...

             totalPages =((totalRows+pageSize)-1)/pageSize;//获得总页数

             initList(1);

                                           }

             

             private void initList(int currentPage){

                 list.removeAll(list);

             conn = dgs.getConnection();

             try{

                        ps = conn.prepareStatement("Select * FROM jsptest LIMIT ?,20");

                        int temp = (currentPage-1)*20;

                        ps.setInt(1, temp);

                        rs = ps.executeQuery();

                        while (rs.next()){

                                 User user = new User();

                                 user.setId(rs.getString(1));

                                 user.setName(rs.getString(2));

                                 list.add(user);

                        }

             }catch(SQLException e){

                        e.printStackTrace();

             }finally{

                        dgs.closeConnection(rs, ps, conn);

             }

             }

             //粗犷的得到行数

             private int initRowCount(){

             conn = dgs.getConnection();

             try{

             ps = conn.prepareStatement("Select * FROM jsptest");

             rs = ps.executeQuery();

             rs.last();

             int result = rs.getRow();

             rs.first();

             return result;

             }catch(SQLException e){

                        e.printStackTrace();

             }finally{

                        dgs.closeConnection(rs, ps, conn);

             }

             return 0;

             }

            

             //页面调数据的时候,重新发出查询,初始化结果列表

                   public ArrayList<User> getList(int cp) {

                            initList(cp);

                            ArrayList<User> temp = new ArrayList<User>();

                            for(int i =0;i<20;i++){

                                     temp.add(list.get(i));

                            }

                            return temp;

                   }

        //other setters and getters

                   ……



紧接着是Action代码

package com.ClockWise.ray.jsp;

import java.util.ArrayList;

import com.opensymphony.xwork2.ActionSupport;

public class ShowAction extends ActionSupport {

         private int totalPages;

         private boolean hasPre;

         private boolean hasNext;

         private int currentPage=1;

         private ArrayList<User> list;

         //以上几个和PageInformation里面的一一对应

         private String username ="ray";

         private ArrayList list2= new ArrayList();//这个list用来存放下面的页码起始位置

         private PageInformation pi;

        

         public String execute(){

                   init(currentPage);

                   return SUCCESS;

         }

        

         private void init(int currentPage){

                   pi = new PageInformation();

                   this.setTotalPages(pi.getTotalPages());

                   this.setHasPre(pi.isHasPrevious());

                   this.setHasNext(pi.isHasNext());

                   this.setList(pi.getList(currentPage));

                  

                   for(int i =currentPage;i<=currentPage+20;i++){

                            Current c = new Current();

                            c.setCurrentPage(i);

                            list2.add(c);

                   }

         }

        

         public ArrayList<User> getList() {

                   this.setList(pi.getList(currentPage));

                   return list;

         }

//other setters and getters

…….



最后是JSP代码

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

    pageEncoding="ISO-8859-1"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>

<s:form action="ShowAction" method="GET">

   <h1>Welcome <s:property value="username"/></h1><BR>

   <h1>CurrentPage <s:property value="currentPage"/></h1>

  

   <!--show items of this page-->

   <s:iterator value="list" status="status">

        <s:property value="id"/>

        <s:property value="name"/>

        <BR>

   </s:iterator>

            

   <!--define the url of the previous page and next page-->

     <s:url id="url_pre" value="ShowAction.action">

         <s:param name="currentPage" value="currentPage-1"></s:param>

     </s:url>

     <s:url id="url_next" value="ShowAction.action">

         <s:param name="currentPage" value="currentPage+1"></s:param>

     </s:url> 

    

   <!-- use url defined above -->    

   <s:a href="%{url_pre}">Pre</s:a>

  

   <s:iterator value="list2" status="status">

      <s:url id="url" value="ShowAction.action">

      <!-- pass the currentPage parameter -->

         <s:param name="currentPage" value="currentPage"></s:param>

      </s:url>

      <s:a href="%{url}"><s:property value="currentPage"/> </s:a>

   </s:iterator>

   <s:a href="%{url_next}">Next</s:a>

</s:form>  

</body>