随笔-57  评论-202  文章-17  trackbacks-0

      在网页编程中,经常需要利用分页显示数据,下面是我的分页显示的例子。
      先说我的设计思路:
      1.首先用一个PageData类保存页面相关的数据,有三个域:
            a.一个Collection域,用于保存页面显示的数据集合;
            b.一个表示当前页数的int域;
            c.一个表示最大页数的int域。
      2.一个Action实现,TurnPageAction用于控制页面的翻转。它需要一个ActionForm实例,这个实例保存TurnPageAction需要的一些数据,在Struts1.1以后,完全可以用一个DynaActionForm实现,因为我这个例子是在用Struts1.0时实现的,所以就保留了下来。
      下图是我的实现流程图:
page.JPG

      PageData类代码:

  1import java.util.Collection;
  2
  3/**
  4 * <p>Title: </p>
  5 * <p>Description: </p>
  6 * <p>Copyright: Copyright (c) 2003</p>
  7 * <p>Company: </p>
  8 * @author George Hill
  9 * @version 1.0
 10 */

 11
 12public class PageData {
 13
 14  /**
 15   * 每页显示的数据行数
 16   */

 17  public final static int NUMBER_PER_PAGE = 15;
 18
 19  /**
 20   * 保存页面显示的数据集合
 21   */

 22  protected Collection list;
 23
 24  /**
 25   * 当前页数
 26   */

 27  protected int page;
 28
 29  /**
 30   * 最大页数
 31   */

 32  protected int maxPage;
 33
 34  /**
 35   * 无参构造方法
 36   */

 37  public PageData() {}
 38
 39  /**
 40   * 构造方法
 41   * @param list 数据集
 42   * @param page 当前页数
 43   * @param maxPage 最大页数
 44   */

 45  public PageData(Collection list, int page, int maxPage) {
 46    this.list = list;
 47    this.page = page;
 48    this.maxPage = maxPage;
 49  }

 50
 51  /**
 52   * 获得数据集合
 53   * @return 数据集合
 54   */

 55  public Collection getList() {
 56    return this.list;
 57  }

 58
 59  /**
 60   * 设置数据集合
 61   * @param list 新的数据集合
 62   */

 63  public void setList(Collection list) {
 64    this.list = list;
 65  }

 66
 67  /**
 68   * 获得当前页数
 69   * @return 当前页数
 70   */

 71  public int getPage() {
 72    return this.page;
 73  }

 74
 75  /**
 76   * 获得上页页数
 77   * @return 上页页数
 78   */

 79  public int getPrePage() {
 80    int prePage = page - 1;
 81
 82    if (prePage <= 0)
 83      prePage = 1;
 84
 85    return prePage;
 86  }

 87
 88  /**
 89   * 获得下页页数
 90   * @return 下页页数
 91   */

 92  public int getNextPage() {
 93    int next = page + 1;
 94
 95    if (next > maxPage)
 96      next = maxPage;
 97
 98    return next;
 99  }

100
101  /**
102   * 设置当前页数
103   * @param page 当前页数新值
104   */

105  public void setPage(int page) {
106    this.page = page;
107  }

108
109  /**
110   * 获得最大页数
111   * @return 最大页数
112   */

113  public int getMaxPage() {
114    return this.maxPage;
115  }

116
117  /**
118   * 设置最大页数
119   * @param maxPage 最大页数新值
120   */

121  public void setMaxPage(int maxPage) {
122    this.maxPage = maxPage;
123  }

124
125  /**
126   * 获得首页标识
127   * @return 首页标识
128   */

129  public boolean isFirstPage() {
130    if (this.page <= 1)
131      return true;
132
133    return false;
134  }

135
136  /**
137   * 获得末页标识
138   * @return 末页标识
139   */

140  public boolean isLastPage() {
141    if (this.page >= this.maxPage)
142      return true;
143
144    return false;
145  }

146}

147

      TurnPageForm类代码:

  1import javax.servlet.http.*;
  2import org.apache.struts.action.*;
  3
  4/**
  5 * <p>Title: </p>
  6 * <p>Description: </p>
  7 * <p>Copyright: Copyright (c) 2003</p>
  8 * <p>Company: </p>
  9 * @author George Hill
 10 * @version 1.0
 11 */

 12
 13public class TurnPageForm extends ActionForm{
 14  
 15  /**
 16   * 要跳转的页码
 17   */

 18  protected int page;
 19
 20  /**
 21   * 跳转按钮
 22   */

 23  protected String turn;
 24
 25  /**
 26   * 首页按钮
 27   */

 28  protected String first;
 29
 30  /**
 31   * 上一页按钮
 32   */

 33  protected String preview;
 34
 35  /**
 36   * 下一页按钮
 37   */

 38  protected String next;
 39
 40  /**
 41   * 末页按钮
 42   */

 43  protected String last;
 44
 45  /**
 46   * 跳转地址
 47   */

 48  protected String url;
 49
 50  /**
 51   * 当前页码
 52   */

 53  protected int currentPage;
 54
 55  /**
 56   * 最大页码
 57   */

 58  protected int maxPage;
 59
 60  /**
 61   * 获得跳转页码
 62   * @return 跳转页码
 63   */

 64  public int getPage() {
 65    return this.page;
 66  }

 67
 68  /**
 69   * 设置跳转页码
 70   * @param page 跳转页码值
 71   */

 72  public void setPage(int page) {
 73    this.page = page;
 74  }

 75
 76  /**
 77   * 获得跳转按钮值
 78   * @return 跳转按钮值
 79   */

 80  public String getTurn() {
 81    return this.turn;
 82  }

 83
 84  /**
 85   * 设置跳转按钮值
 86   * @param turn 跳转按钮值
 87   */

 88  public void setTurn(String turn) {
 89    this.turn = turn;
 90  }

 91
 92  /**
 93   * 获得首页按钮值
 94   * @return 首页按钮值
 95   */

 96  public String getFirst() {
 97    return this.first;
 98  }

 99
100  /**
101   * 设置首页按钮值
102   * @param first 首页按钮值
103   */

104  public void setFirst(String first) {
105    this.first = first;
106  }

107
108  /**
109   * 获得上一页按钮值
110   * @return 上一页按钮值
111   */

112  public String getPreview() {
113    return this.preview;
114  }

115
116  /**
117   * 设置上一页按钮值
118   * @param preview 上一页按钮值
119   */

120  public void setPreview(String preview) {
121    this.preview = preview;
122  }

123
124  /**
125   * 获得下一页按钮值
126   * @return 下一页按钮值
127   */

128  public String getNext() {
129    return this.next;
130  }

131
132  /**
133   * 设置下一页按钮值
134   * @param next 下一页按钮值
135   */

136  public void setNext(String next) {
137    this.next = next;
138  }

139
140  /**
141   * 获得末页按钮值
142   * @return 末页按钮值
143   */

144  public String getLast() {
145    return this.last;
146  }

147
148  /**
149   * 设置末页按钮值
150   * @param last 末页按钮值
151   */

152  public void setLast(String last) {
153    this.last = last;
154  }

155
156  /**
157   * 获得跳转地址
158   * @return 跳转地址
159   */

160  public String getUrl() {
161    return this.url;
162  }

163
164  /**
165   * 设置跳转地址
166   * @param url 跳转地址
167   */

168  public void setUrl(String url) {
169    this.url = url;
170  }

171
172  /**
173   * 获得当前页码
174   * @return 当前页码
175   */

176  public int getCurrentPage() {
177    return this.currentPage;
178  }

179
180  /**
181   * 设置当前页码
182   * @param page 当前页码值
183   */

184  public void setCurrentPage(int page) {
185    this.currentPage = page;
186  }

187
188  /**
189   * 获得最大页码
190   * @return 最大页码
191   */

192  public int getMaxPage() {
193    return this.maxPage;
194  }

195
196  /**
197   * 设置最大页码
198   * @param page 最大页码
199   */

200  public void setMaxPage(int page) {
201    this.maxPage = page;
202  }

203
204  /**
205   * 重置属性
206   * @param mapping action映射
207   * @param request HTTP请求
208   */

209  public void reset(ActionMapping mapping, HttpServletRequest request) {
210    this.page = 0;
211    this.turn = null;
212    this.first = null;
213    this.preview = null;
214    this.next = null;
215    this.last = null;
216    this.url = null;
217    this.currentPage = 0;
218    this.maxPage = 0;
219  }

220
221}

222

      TurnPageAction代码:

 1import java.io.*;
 2import javax.servlet.*;
 3import javax.servlet.http.*;
 4
 5import org.apache.struts.action.*;
 6
 7import xxx.TurnPageForm;
 8
 9/**
10 * <p>Title: </p>
11 * <p>Description: </p>
12 * <p>Copyright: Copyright (c) 2003</p>
13 * <p>Company: </p>
14 * @author George Hill
15 * @version 1.0
16 */

17
18public class TurnPageAction extends Action {
19
20  /**
21   * 执行用户的跳转页面请求
22   * @param mapping 转发映射表
23   * @param form 请求的ActionForm Bean
24   * @param request 用户请求
25   * @param response 用户应答
26   * @return 成功或者失败的转发
27   * @throws IOException IO例外
28   * @throws ServletException Servlet例外
29   */

30  public ActionForward execute(ActionMapping mapping, ActionForm form,
31                               HttpServletRequest request,
32                               HttpServletResponse response) throws IOException,
33      ServletException {
34    if (form instanceof TurnPageForm) {
35      TurnPageForm tform = (TurnPageForm) form;
36      int page = 0;
37      String url = null;
38
39      if (tform.getTurn() != null{
40        page = tform.getPage();
41      }
 else if (tform.getFirst() != null{
42        page = 1;
43      }
 else if (tform.getPreview() != null{
44        page = tform.getCurrentPage() - 1;
45      }
 else if (tform.getNext() != null{
46        page = tform.getCurrentPage() + 1;
47      }
 else if (tform.getLast() != null{
48        page = tform.getMaxPage();
49      }

50
51      if (page < 1{
52        page = 1;
53      }
 else if (page > tform.getMaxPage()) {
54        page = tform.getMaxPage();
55      }

56      if (tform.getUrl().indexOf("?"== -1{
57        url = tform.getUrl() + "?page=" + page;
58      }
 else {
59        url = tform.getUrl() + "&page=" + page;
60      }

61      return new ActionForward(url);
62    }

63
64    return mapping.findForward("error");
65  }

66}

67

      struts-config.xml的相关片断:

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
 3<struts-config>
 4  <form-beans>
 5
 6    <form-bean name="turnPageForm" type="xxx.TurnPageForm" />
 7
 8  </form-bean>
 9  <action-mappings>
10
11    <action name="turnPageForm" path="/turnPage" scope="request" type="xxx.TurnPageAction" />
12  </action-mappings>
13</struts-config>
posted on 2005-05-13 11:18 小米 阅读(2248) 评论(4)  编辑  收藏 所属分类: Struts

评论:
# re: 如何在Struts中实现分页显示数据(1) 2007-11-27 21:44 | wwasnl
找了多少天啦,终于看到一个完整的代码,哥们谢啦!  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(1) 2008-05-22 15:46 | ycncepu
写的很好啊,早听过小米的大名哦,
为人还特别谦虚,赞一个  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(1) 2008-11-13 12:19 | 韩飞
在JSP页面中如何显示啊  回复  更多评论
  
# re: 如何在Struts中实现分页显示数据(1) 2014-01-17 00:26 | 李亚男
PageData中的集合是所有都取出,还是用多少取多少,若是前者,会拖慢系统的。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: