Struts 2 – 分页技术详解

Struts 2 – 分页技术详解

使用Struts 2进行分页更为简单方便,配合Action能降低代码间的耦合度,提高代码重用率。

 

项目结构

 

先来看一下今天要做分页的项目结构:

 

分页步骤

1.        配置Hibernate和Struts 2开发环境

2.        创建OrderDaoImpl类并编写Dao层实现类的代码,为分页提供数据来源

 

示例代码:

packagecom.sp.daoimpl;
 
importjava.util.ArrayList;
importjava.util.List;
 
importorg.hibernate.Query;
importorg.hibernate.Session;
 
importcom.sp.entity.SevenOrders;
importcom.sp.sf.HibernateSessionFactory;
 
/**
 * 订单DAO类
 *
 * 项目名称:StrutsSplitPage 类名称:OrderDaoImpl类描述: 创建人:SteveJrong创建时间:2015-10-26
 * 下午5:27:31 修改人:SteveJrong修改时间:2015-10-26 下午5:27:31 修改备注:
 *
 * @version 1.0 Alpha
 *
 */
publicclass OrderDaoImpl {
 
         /**
          * 获取总记录数的方法
          *
          * @return
          */
         public Integer getAllCounts() {
                   Session session = null;
                   Query query = null;
                   Integer sum = 0;
 
                   try {
                            session =HibernateSessionFactory.getSession();
                            String hql ="select count(*) from SevenOrders";
                            query =session.createQuery(hql);
                            sum = newLong((Long) query.iterate().next()).intValue();
                   } catch (Exception e) {
                            // TODO: handleexception
                            e.printStackTrace();
                            System.err.println(e.getMessage());
                   } finally {
                            session.close();
                   }
                   return sum;
         }
 
         /**
          * 分页的方法
          *
          * @param pageIndex
          * @param pageSize
          * @return
          */
         @SuppressWarnings("unchecked")
         public List<SevenOrders>splitPage(int startIndex, int pageSize) {
                   Session session = null;
                   List<SevenOrders> list= new ArrayList<SevenOrders>();
 
                   try {
                            session =HibernateSessionFactory.getSession();
                            list =session.createCriteria(SevenOrders.class)
                                               .setFirstResult(startIndex).setMaxResults(pageSize).list();
                   } catch (Exception e) {
                            // TODO: handleexception
                            e.printStackTrace();
                            System.err.println(e.getMessage());
                   } finally {
                            session.close();
                   }
                   return list;
         }
}

3.        创建继承于ActionSupport类的OrderAction类用于跳转到此Action上处理业务

 

示例代码:

packagecom.sp.action;
 
importjava.util.List;
 
importcom.opensymphony.xwork2.Action;
importcom.opensymphony.xwork2.ActionSupport;
importcom.sp.daoimpl.OrderDaoImpl;
importcom.sp.entity.SevenOrders;
 
/**
 * 订单相关的Action
 *
 * 项目名称:StrutsSplitPage 类名称:OrderAction类描述: 创建人:SteveJrong创建时间:2015-10-26
 * 下午5:27:19 修改人:SteveJrong修改时间:2015-10-26 下午5:27:19 修改备注:
 *
 * @version 1.0 Alpha
 *
 */
publicclass OrderAction extends ActionSupport {
 
         /**
          *
          */
         private static final longserialVersionUID = 1222749185637056315L;
 
         /**
          * 当前页面的索引
          */
         private Integer pageIndex = 1;
 
         /**
          * 总页数
          */
         private Integer totalPageSize;
 
         /**
          * 上一页的页码
          */
         private Integer prevPageIndex;
 
         /**
          * 下一页的页码
          */
         private Integer nextPageIndex;
 
         /**
          * 末页的页码
          */
         private Integer lastPageIndex;
 
         /**
          * 每页要显示的信息条数
          */
         private Integer pageSize = 2;
 
         /**
          * 订单的集合属性
          */
         private List<SevenOrders> soList;
 
         public Integer getPageIndex() {
                   return pageIndex;
         }
 
         public void setPageIndex(IntegerpageIndex) {
                   this.pageIndex = pageIndex;
         }
 
         public Integer getTotalPageSize() {
                   return totalPageSize;
         }
 
         public void setTotalPageSize(IntegertotalPageSize) {
                   this.totalPageSize =totalPageSize;
         }
 
         public Integer getPrevPageIndex() {
                   return prevPageIndex;
         }
 
         public void setPrevPageIndex(IntegerprevPageIndex) {
                   this.prevPageIndex =prevPageIndex;
         }
 
         public Integer getNextPageIndex() {
                   return nextPageIndex;
         }
 
         public void setNextPageIndex(IntegernextPageIndex) {
                   this.nextPageIndex =nextPageIndex;
         }
 
         public Integer getLastPageIndex() {
                   return lastPageIndex;
         }
 
         public void setLastPageIndex(IntegerlastPageIndex) {
                   this.lastPageIndex =lastPageIndex;
         }
 
         public Integer getPageSize() {
                   return pageSize;
         }
 
         public void setPageSize(IntegerpageSize) {
                   this.pageSize = pageSize;
         }
 
         public List<SevenOrders>getSoList() {
                   return soList;
         }
 
         public voidsetSoList(List<SevenOrders> soList) {
                   this.soList = soList;
         }
 
         /**
          * Action默认的执行方法
          */
         @Override
         public String execute() throwsException {
                   // TODO Auto-generated methodstub
 
                   OrderDaoImpl daoImpl = newOrderDaoImpl();
 
                   // 获取总记录数
                   int totalItemSize =daoImpl.getAllCounts();
 
                   // 将总记录数和总页数进行取余,判断要分出多少页来才能足够显示所有的信息
                   if (totalItemSize % pageSize== 0) {
                            // 能除尽说明正好可以显示完全部数据
                            totalPageSize =totalItemSize / pageSize;
                   } else {
                            // 除不尽说明还需要加单独的一页才够显示全部数据
                            totalPageSize =totalItemSize / pageSize + 1;
                   }
 
                   /**
                    * 针对页面进行各种逻辑判断
                    */
                   // 当pageIndex即当前页码为第1页时,设置“上一页”按钮的页码也为1,设置“下一页”按钮的页码为当前页码(pageIndex)加1
                   if (pageIndex <= 1) {
                            prevPageIndex = 1;
                            nextPageIndex =pageIndex + 1;
 
                            // 当pageIndex即当前页码在第2页到最大页数之间时,设置“上一页”按钮的页码为当前页码减1,设置“下一页”按钮的页码为当前页码加1
                   } else if (pageIndex > 1&& pageIndex < totalPageSize) {
                            prevPageIndex =pageIndex - 1;
                            nextPageIndex = pageIndex+ 1;
 
                            // 当pageIndex即当前页码已经达到了最大页数时,设置“上一页”按钮的页码为当前页码减1(因为要上翻一页就需要当前页码减1),设置“下一页”按钮的页码为当前页码
                   } else if (pageIndex >=totalPageSize) {
                            prevPageIndex =pageIndex - 1;
                            nextPageIndex =pageIndex;
                   }
 
                   // 设置“末页”按钮的页码为总页数,即最大页数
                   lastPageIndex =totalPageSize;
 
                   // 每次要分页时要从数据库表的第几行数据开始的固定算法(pageIndex - 1) *
                   // pageSize,表示当前页码减去1页后和每页要显示的条数的乘积即每次要从第几个开始显示
                   soList =daoImpl.splitPage((pageIndex - 1) * pageSize, pageSize);
 
                   return Action.SUCCESS;
         }
}

4.        配置struts.xml配置文件

 

配置文件:

<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPEstruts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
         <package name="default"namespace="/" extends="struts-default">
                   <actionname="ordersInfo" class="com.sp.action.OrderAction">
                            <resultname="success">index.jsp</result>
                   </action>
         </package>
</struts>

5.        建立分页的JSP页面

 

示例代码:

<%@page language="java" import="java.util.*"pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
 
<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>全部订单信息</title>
<metahttp-equiv="pragma" content="no-cache">
<metahttp-equiv="cache-control" content="no-cache">
<metahttp-equiv="expires" content="0">
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equiv="description" content="This is my page">
</head>
 
<body>
         <div style="margin: 0px auto;width: 750px;">
                   <tablewidth="80%" border="1"
                            style="border-collapse:collapse; text-align: center;"
                            cellpadding="1"cellspacing="1" align="center">
                            <tr>
                                     <th>订单编号</th>
                                     <th>收货人姓名</th>
                                     <th>收货地址</th>
                                     <th>订单创建日期</th>
                            </tr>
 
                            <s:iteratorvalue="soList">
                                     <tr>
                                               <td><s:propertyvalue="id" /></td>
 
                                               <td><s:propertyvalue="name" /></td>
 
                                               <td><s:propertyvalue="address" /></td>
 
                                               <td><s:propertyvalue="createtime" /></td>
                                     </tr>
                            </s:iterator>
                   </table>
 
                   <tablewidth="37%" style="text-align: center;" align="center">
                            <tr>
                                     <!-- 当页面不在第一页时显示“首页”按钮 -->
                                     <s:iftest="pageIndex!=1">
                                               <td>
                                                        <button
                                                                 οnclick="javascript:window.location.href='ordersInfo.action?pageIndex=1'">首页</button>
                                               </td>
                                     </s:if>
 
                                     <td>
                                               <button
                                                        οnclick="javascript:window.location.href='ordersInfo.action?pageIndex=<s:propertyvalue="prevPageIndex" />'">上一页</button>
                                     </td>
 
                                     <td>
                                               <button
                                                        οnclick="javascript:window.location.href='ordersInfo.action?pageIndex=<s:propertyvalue="nextPageIndex" />'">下一页</button>
                                     </td>
 
                                     <!-- 当页面不在末页时显示“末页”按钮 -->
                                     <s:iftest="pageIndex!=lastPageIndex">
                                               <td>
                                                        <button
                                                                 οnclick="javascript:window.location.href='ordersInfo.action?pageIndex=<s:propertyvalue="lastPageIndex" />'">末页</button>
                                               </td>
                                     </s:if>
                            </tr>
                   </table>
         </div>
</body>
</html>

效果展示

1. 首页效果

 

 

2.末页效果

 

 

3.中间随机页效果


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值