`
mizhao1984
  • 浏览: 87875 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

对java翻页查询代码的封装(jsp+struts+spring)

阅读更多

1.page对象:用于对翻页信息的封装

public class Pages {
 
 /**
  * 当前页
  */
 private  int currentPage = 1;
 @SuppressWarnings("unused")
 /**
  * 总页数
  */
 private  int maxPage = 0;
 /**
  * 每页记录数
  */
 private  int pageSize = GlobalConfigContaint.getPageSize();
 /**
  * 总记录数
  */
 private  int maxSize = 0;

 /**
  * 构造Pages对象
  * @param currentPage 当前页
  */
 public Pages(int currentPage){
  this.currentPage = currentPage==0?1:currentPage;
 }
 /**
  * 构造Pages对象
  * @param currentPage
  * @param pageSize
  */
 public Pages(int currentPage,int pageSize){
  this.currentPage = currentPage==0?1:currentPage;
  this.pageSize = pageSize;
 }
 
 public int getCurrentPage() {
  return currentPage == 0?1:currentPage;
 }

 public void setCurrentPage(int currentPage) {
  this.currentPage = currentPage == 0?1:currentPage;
 }

 public int getMaxPage() {
  return (maxSize+pageSize-1)/pageSize;
 }

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

 public int getPageSize() {
  return pageSize;
 }

 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }

 public int getMaxSize() {
  return maxSize;
 }

 public void setMaxSize(int maxSize) {
  this.maxSize = maxSize;
 }
 /**
  * 分页包装语句
  * @param sql
  * @return
  */
 public  String fenYeSQL(String sql){
  int start = (currentPage-1)*pageSize;
  int end = currentPage*pageSize;
  String str = "select * from (select t1.*,rownum r from (select t.* from ("+sql+") t where rownum<="+end+" ) t1) t2 where t2.r>"+start;
  return str;
 }
 /**
  * 获取总记录数包装语句
  * @param sql
  * @return
  */
 public String maxSizeSQL(String sql){
  return "select count(*) from ("+sql+")";
 }

 public Pages() {
 }

}

 

2.PageSession类:对页面查询信息的处理

 

/**
 * 翻页帮助类
 * @author mz
 *
 */
public class PageSession {
 
 private String requestUri;
 
 public PageSession(HttpServletRequest request){
  this.requestUri = request.getRequestURI() + "?method=" + request.getParameter("method");
 }

 private Pages page = new Pages();
 /**
  * 查询参数集合
  */
 Map<String,String> conditions = new HashMap<String,String>();

 public Map<String, String> getConditions() {
  return conditions;
 }

 public void setConditions(Map<String, String> conditions) {
  this.conditions = conditions;
 }

 public String getRequestUri() {
  return requestUri;
 }

 public void setRequestUri(String requestUri) {
  this.requestUri = requestUri;
 }
 
 public Pages getPage() {
  return page;
 }

 public void setPage(Pages page) {
  this.page = page;
 }

 /**
  * 初始化分页
  * @param request
  * @param keys 查询参数
  * @param keys 查询参数值
  */
 public static PageSession initPageSession(HttpServletRequest request,String[] keys){
  PageSession pageSession = null;
  boolean valueIsNull  = false;
  //从request中获得参数值
  String[] values = new String[keys.length];
  for (int i=0;i<values.length;i++) {
   values[i] = request.getParameter(keys[i]);
   if(values[i] == null){
    values[i] = "";
    valueIsNull = true;
   }
  }
  
  //如果为空则表示:点击翻页或初次请求action
  if(valueIsNull){
   pageSession = (PageSession)request.getSession().getAttribute("pageSession");
   //判断是否为同一个请求action
   if(pageSession != null && pageSession.getRequestUri().indexOf(request.getRequestURI() + "?method=" + request.getParameter("method")) != -1){
    for (int i=0;i<values.length;i++) {
     values[i] = pageSession.getConditions().get(keys[i]);
    }
   }else{
    pageSession = new PageSession(request);
   }
  }else{
   pageSession = new PageSession(request);
   //点击查询
   for (int i=0;i<values.length;i++) {
    pageSession.getConditions().put(keys[i], values[i]);
   }
  }
  
  if(request.getParameter("currentPage") != null){
   pageSession.page.setCurrentPage(DataUtils.getInt(request.getParameter("currentPage")));
  }
  request.setAttribute("page",pageSession.page);
  request.getSession().setAttribute("pageSession",pageSession);
  return pageSession;
 }
}

 

3.jsp翻页代码:

<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld"%>
<div class="split_page">
 共${(page.maxPage==0)? 1 : page.maxPage}页&nbsp;当前第${page.currentPage}页&nbsp;
<c:if test="${page!=null}">
    <c:if test="${page.maxPage == 1 || page.maxPage == 0}">
            首页&nbsp;|&nbsp;上一页&nbsp;|&nbsp;下一页&nbsp;|&nbsp;尾页
    </c:if>
 <c:if test="${page.currentPage>1&&page.currentPage<page.maxPage&&page.maxSize!=0}">
   <a href="${pageSession.requestUri }&currentPage=1">首页</a>&nbsp;|&nbsp;  
  <a href="${pageSession.requestUri }&currentPage=${page.currentPage-1}">上一页</a>&nbsp;|&nbsp;
  <a href="${pageSession.requestUri }&currentPage=${page.currentPage+1}">下一页</a>&nbsp;|&nbsp;
  <a href="${pageSession.requestUri }&currentPage=${page.maxPage}">尾页</a>
 </c:if> 
 <c:if test="${page.currentPage<=1&&page.maxPage!=1&&page.maxSize!=0}">
  首页&nbsp;|&nbsp;上一页&nbsp;|&nbsp;
  <a href="${pageSession.requestUri }&currentPage=${page.currentPage+1}">下一页</a>&nbsp;|&nbsp;
  <a href="${pageSession.requestUri }&currentPage=${page.maxPage}">尾页</a>
 </c:if> 
 <c:if test="${page.currentPage>=page.maxPage&&page.maxPage!=1&&page.maxSize!=0}">
  <a href="${pageSession.requestUri }&currentPage=1">首页</a>&nbsp;|&nbsp;
  <a href="${pageSession.requestUri }&currentPage=${page.currentPage-1}">上一页</a>&nbsp;|&nbsp;
  下一页&nbsp;|&nbsp;尾页
 </c:if>     
</c:if>
</div>

 

使用方法:

以上3个类在使用中均不用做修改,约束:(只支持struts的DispatchAction,且struts配置文件中 parameter="method")

 

只需在action中添加如下代码:

CardBiz cardBiz = (CardBizImpl)this.getService("cardBiz");
  String[] keys = {"organizeId","status","startTime","endTime"};
  PageSession pageSession = PageSession.initPageSession(request,keys);
  //获得查询参数值
  String organizeId = pageSession.getConditions().get("organizeId");
  String status = pageSession.getConditions().get("status");
  String startTime = pageSession.getConditions().get("startTime");
  String endTime = pageSession.getConditions().get("endTime");
  Map<String,Object> conditionMap = new HashMap<String,Object>();
  conditionMap.put("organizeId", DataUtils.getInt(organizeId));
  conditionMap.put("status", DataUtils.getInt(status));
  conditionMap.put("startTime", startTime);
  conditionMap.put("endTime", endTime);

  //分页查询数据(在查询数据时可使用Pages对象的fenYeSQL,maxSizeSQL方法)
  List<CardMO> cardMoList = cardBiz.findMosRukuList(pageSession.getPage(),conditionMap);
  request.setAttribute("cardMoList",cardMoList);

分享到:
评论

相关推荐

    struts2+spring3+hibernate4 + UI 组件(easyui)+代码生成器+共通封装+Spring_security权限

    架构技术: struts2+spring3+hibernate4 + UI 组件(easyui)+Spring_security权限 配置思想: Convention 零配置(不需要任何配置文件) 优点; [1].代码生成器(单表的增删改查完美生成) 注意:包括JSP页面的生成...

    spring+struts2+hibernate框架说明

    Spring 提供了管理业务对象的一致方法,并鼓励注入对接口编程而不是对类编程的良好习惯,使我们的产品在最大程度上解耦。Hibernate 是用来持久化数据的,提供了完全面向对象的数据库操作。Hibernate对JDBC进行了非常...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    1.4.2 JSP(Java服务页面) 1.4.3 EJB(企业JavaBean) 1.4.4 JDBC(Java数据库连接) 1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java命名和目录服务) 1.4.7 JavaMail(Java邮件服务) 1.4.8 RMI(远程方法调用) ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    1.4.2 JSP(Java服务页面) 1.4.3 EJB(企业JavaBean) 1.4.4 JDBC(Java数据库连接) 1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java命名和目录服务) 1.4.7 JavaMail(Java邮件服务) 1.4.8 RMI(远程方法调用) ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    1.4.2 JSP(Java服务页面) 1.4.3 EJB(企业JavaBean) 1.4.4 JDBC(Java数据库连接) 1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java命名和目录服务) 1.4.7 JavaMail(Java邮件服务) 1.4.8 RMI(远程方法调用) ...

    struts2+spring2+ibates

    4、写sping的application和applicationservices或者其它配置.(可对些文件分为其它文件,在web.xml中注册即可) 5、配置struts.xml 6、配置sqlmapconfig.xml,如果有include,则配置其它文件. 7、写dao和service类. 8、...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...

    java web开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...

    JAVA上百实例源码以及开源项目源代码

     用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例  Message-Driven Bean EJB实例源代码,演示...

    Java知识拾遗:三大框架的技术起源

    Struts、Hibernate和Spring是我们Java开发中...但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的 Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等

    JAVA上百实例源码以及开源项目

     用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例  Message-Driven Bean EJB实例源代码,演示...

    sshLearner.rar

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用JDBC的场合,可以在Servlet/JSP的Web应用中使用,也可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的...

    Spring开发指南

    构建Spring基础代码 Spring 基础语义 Dependency Injection 依赖注入的几种实现类型 Type1 接口注入 Type2 设值注入 Type3 构造子注入 几种依赖注入模式的对比总结 Spring Bean封装机制 Bean Wrapper ...

    java+ssh+bootstrap+mysql超市(便利店)管理系统(含概要设计).zip

    源码亲自运行测试过,放心使用!...后端主要应用框架技术:Spring+hibernate+struts2+mysql 开发工具:Myeclipse或Eclipse、jdk1.7、tomcat8、mysql5.6或5.7数据库。 温馨提示:有运行文档,带概要设计

    SSH开发框架总结

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用JDBC的场合,可以在Servlet/JSP的Web应用中使用,也可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的...

    JAVA WEB典型模块与项目实战大全

    第27章 商业银行设备巡检系统(struts 2.x+spring+hibernate)  27.1 商业银行设备巡检系统概述  27.2 商业银行设备巡检系统前期准备  27.3 商业银行设备巡检系统具体实现——系统管理应用  27.4 商业银行...

    java从入门到精通70个PPT

    javaPPT 从入门到精通 从基础到框架 70个PPT 1.初识java 2.变量、数据类型和运算符和表达式 3运算符和程序流程结构 4.数组 5.类和对象 6.字符串 7.封装,继承,多肽 8.接口与抽象类 9.java集合类 10.jdbc 11 html...

    zixunpingtaissh.zip

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用JDBC的场合,可以在Servlet/JSP的Web应用中使用,也可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的...

    java开源包10

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

Global site tag (gtag.js) - Google Analytics