DisplayTag 分页 PaginatedList实现

本文介绍了一个自定义的分页辅助类PaginatedListHelper,并展示了如何在Struts框架中使用该类来处理分页逻辑。此外,还讨论了解决翻页URL受Struts Action影响的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.写一个实现PaginatedList的类PaginatedListHelper

  1. public class PaginatedListHelper
  2.         implements PaginatedList {
  3.     private int fullListSize; // 总记录数
  4.     private List list; // 每页列表
  5.     private int objectsPerPage;// 每页记录数 page size
  6.     private int pageNumber = 1// 当前页码
  7.     private String searchId;
  8.     private String sortCriterion;
  9.     private SortOrderEnum sortDirection;
  10.     public int getFullListSize() {
  11.         return fullListSize;
  12.     }
  13.     public void setFullListSize(int fullListSize) {
  14.         this.fullListSize = fullListSize;
  15.     }
  16.     public List getList() {
  17.         return list;
  18.     }
  19.     public void setList(List list) {
  20.         this.list = list;
  21.     }
  22.     public int getObjectsPerPage() {
  23.         return objectsPerPage;
  24.     }
  25.     public void setObjectsPerPage(int objectsPerPage) {
  26.         this.objectsPerPage = objectsPerPage;
  27.     }
  28.     public int getPageNumber() {
  29.         return pageNumber;
  30.     }
  31.     public void setPageNumber(int pageNumber) {
  32.         this.pageNumber = pageNumber;
  33.     }
  34.     public String getSearchId() {
  35.         return searchId;
  36.     }
  37.     public void setSearchId(String searchId) {
  38.         this.searchId = searchId;
  39.     }
  40.     public String getSortCriterion() {
  41.         return sortCriterion;
  42.     }
  43.     public void setSortCriterion(String sortCriterion) {
  44.         this.sortCriterion = sortCriterion;
  45.     }
  46.     public SortOrderEnum getSortDirection() {
  47.         return sortDirection;
  48.     }
  49.     public void setSortDirection(SortOrderEnum sortDirection) {
  50.         this.sortDirection = sortDirection;
  51.     }
  52. }

 

2.编写action

  1.      .....................
  2.       // 页码
  3.         int pageNumber;
  4.         if (request.getParameter("page") != null
  5.                 && !"".equals(request.getParameter("page"))) {
  6.             pageNumber = Integer.parseInt(request.getParameter("page"));
  7.         } else {
  8.             pageNumber = 1;
  9.         }
  10.         PaginatedListHelper ph = new PaginatedListHelper();
  11.         try {
  12.            
  13.             //分页数据查询
  14.             List dataList = dao.msgList(conn, pageNumber, para);
  15.             //记录总条数
  16.             int totalNum = dao.totalcount(conn, para);
  17.             ph.setFullListSize(totalNum);
  18.             ph.setList(dataList);
  19.             ph.setPageNumber(pageNumber);
  20.             ph.setObjectsPerPage(20);
  21.            //传递给displaytag table name="requestScope.msgList"的数据
  22.             request.setAttribute("msgList", ph);
  23.             if (conn != null)
  24.                 conn.close();
  25.             
  26.         } catch (Exception e) {
  27.             e.printStackTrace();
  28.             Log.error(MsgAction.class, e.getCause());
  29.         }

3.问题:

   分页的url可能会受到struts action的影响,而在每一次点击翻页链接的时候会再调用一次执行前一个动作的struts action;

   在网上找了这方面的资料,但是仍然没有找到解决办法,也许是displaytag所有解决的bug吧;

   我的解决方法是,如果我的table展示页面对应的actoin是list.do,而在页面上有一个新增按钮,对应的action是new,如果新建成功则页面导到list,这个时候翻页的url就是new的了,如果翻页的话,就会再一次执行new方法,以致往DB中又插入一条记录;我的解决办法是,强制的修改这个action;例如不返回到list页面,而是留有一个返回按钮触发js,window.location.href="/list.do";这样就到了list页面,displaytag的翻页url也是list.do了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值