SSH2多条件查询分页显示(升级版)

一、我们必须先打好框架,这里不做解释了。

二,按我的步骤走,那就不会错,

1,建立一个分页的JavaBean

package ut.filter;

import java.util.List;

public class PageBean {
 private List list;// 要返回的某一页的记录列表
 private int allRow;// 总记录数
 private int totalPage;// 总页数
 private int currentPage;// 当前页
 private int pageSize;// 每页记录数

 private boolean isFirstPage;// 是否为第一页
 private boolean isLastPage;// 是否为最后一页
 private boolean hasPreviousPage;// 是否有前一页
 private boolean hasNextPage;// 是否有下一页

 public List getList() {
  return list;
 }

 public void setList(List list) {
  this.list = list;
 }

 public int getAllRow() {
  return allRow;
 }

 public void setAllRow(int allRow) {
  this.allRow = allRow;
 }

 public int getTotalPage() {
  return totalPage;
 }

 public void setTotalPage(int totalPage) {
  this.totalPage = totalPage;
 }

 public int getCurrentPage() {
  return currentPage;
 }

 public void setCurrentPage(int currentPage) {
  this.currentPage = currentPage;
 }

 public int getPageSize() {
  return pageSize;
 }

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

 /**
  * 以下判断页的信息,只需要getter方法(is方法)即可
  */
 public boolean isFirstPage() {
  return currentPage == 1;// 如是当前页是第一页
 }

 public boolean isLastPage() {
  return currentPage == totalPage;// 如果当前页是最后一页
 }

 public boolean isHasPreviousPage() {
  return currentPage != 1;// 只要当前页不是第一页
 }

 public boolean isHasNextPage() {
  return currentPage != totalPage;// 只要当前不是最后一页
 }

 /**
  * 初始化分页信息
  */
 public void init() {
  this.isFirstPage = isFirstPage();
  this.isLastPage = isLastPage();
  this.hasPreviousPage = isHasPreviousPage();
  this.hasNextPage = isHasNextPage();
 }

 /***************************************************************************
  *
  * 计算总页数,静态方法,供外部直接通过类名调用 pageSize 每页记录数 allRow 总记录数
  *
  * @return 总页数
  */
 public static int counTotalPage(final int pageSize, final int allRow) {
  int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
    / pageSize + 1;
  return totalPage;
 }

 /***************************************************************************
  *
  * 计算当前页开始记录 pageSize 每页记录数 currentPage 当前第几页
  *
  * @return 当前页开始记录号
  */
 public static int countOffset(final int pageSize, final int currentPage) {
  final int offset = pageSize * (currentPage - 1);
  return offset;
 }

 /***************************************************************************
  *
  * 计算当前页,若为0或者请求的URl中没有"?page=",则用1代替 page传入的参数(可能为空,即,则返回1)
  *
  * @return 当前页
  */
 public static int countCurrentPage(int page) {
  final int curPage = (page == 0 ? 1 : page);
  return curPage;
 }
}

 

2,dao

 /**
   * 分页查询
   * hql 查询条件
   * offset 开始记录
   * length 一次查询几条记录数
   * */
  public List queryForPage(final String hql,final int offset,final int lenght);
  /**
   * 查询所有记录数,总记录数
   * **/
  public int getAllRowCount(String hql);

 

3.daoImpl:

 /**
  * 查询所有记录数*
  *
  */
 public int getAllRowCount(String hql) {
  return getHibernateTemplate().find(hql).size();// 总记录数
 }

 /**
  * 分页查询
  *
  */
 public List queryForPage(final String hql, final int offset,
   final int lenght) {
  List list = getHibernateTemplate().executeFind(new HibernateCallback() {

   public Object doInHibernate(Session session)
     throws HibernateException, SQLException {
    Query query = session.createQuery(hql);
    query.setFirstResult(offset);
    query.setMaxResults(lenght);
    List list = query.list();
    return list;
   }
  });
  return list;
 }

 

 

4,service;

/**
   * 分页查询
   * currentPage 当前第几页
   * pageSize 每页大小
   * @return 封闭了分页信息(包括记录List)的Bean
   * */
  public PageBean queryForPage(int pageSize,int currentPage,String hql);

 

 

5,serviceImpl:

 private BSDao bsDao;
 public BSDao getBsDao() {
  return bsDao;
 }
 public void setBsDao(BSDao bsDao) {
  this.bsDao = bsDao;
 }
 /**
   * 分页查询 currentPage 当前第几页 pageSize 每页大小
   *
   * @return 封闭了分页信息(包括记录List)的Bean
   * */
  public PageBean queryForPage(int pageSize, int page, String hql) {
   int allRow = bsDao.getAllRowCount(hql);// 总记录数
   int totalPage = PageBean.counTotalPage(pageSize, allRow);// 总页数
   final int offset = PageBean.countOffset(pageSize, page);// 当前总页开始记录

   final int lenght = pageSize;// 每页记录数
   final int currentPage = PageBean.countCurrentPage(page);
   List<Joy1active> list = bsDao.queryForPage(hql, offset, lenght);// 每一页的记录数
   // 把分页信息保存到Bean中
   PageBean pageBean = new PageBean();
   pageBean.setPageSize(pageSize);
   pageBean.setCurrentPage(currentPage);
   pageBean.setAllRow(allRow);
   pageBean.setTotalPage(totalPage);
   pageBean.setList(list);
   pageBean.init();
   return pageBean;
  }

 

 

6,action:

 

/**
  * 分页部分
  */
 private int page=1;// 第几页
 private PageBean pageBean; // 包含分布信息的bean

 public int getPage() {
  return page;
 }

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

 public PageBean getPageBean() {
  return pageBean;
 }

 public void setPageBean(PageBean pageBean) {
  this.pageBean = pageBean;
 }
public String queryByPrarmate() {
  HttpServletRequest request = ServletActionContext.getRequest();
  String hql = "";
  String category = "";// 项目
  String ctcod = "";// 城市
  String timers = "";// 时间
  String likeName = "";// 模糊查询
  String sx = "";// 顺序
  /** 根据条件查询* */
  StringBuffer sb = new StringBuffer("FROM Joy1matchlist j where 1=1");

  /** * 按项目选择 ** */
  if (!request.getParameter("category").equals("全部")
    && request.getParameter("category") != "") {// 如项目选择的不事"全部"
   category = request.getParameter("category");
   sb.append(" and j.category='").append(category).append("'");
  }
  /** **按城市选择**** */
  if (!request.getParameter("ctcod").equals("全部")
    && request.getParameter("ctcod") != "") {// 如果城市是选择的不是"全部"
   ctcod = request.getParameter("ctcod");
   sb.append(" and j.ctcod='").append(ctcod).append("'");
  }
  /** **按时间选择**** */
  Date date1 = new Date();

  SimpleDateFormat from = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  // 获取当前时间
  String nowTimer = from.format(date1);
  Calendar ca7 = Calendar.getInstance();
  Calendar ca30 = Calendar.getInstance();
  Calendar ca90 = Calendar.getInstance();
  ca7.add(Calendar.DATE, -7);// 7为增加的天数,可以改变的
  ca30.add(Calendar.DATE, -30);// 30为增加的天数,可以改变的
  ca90.add(Calendar.DATE, -90);// 90为增加的天数,可以改变的

  if (request.getParameter("timers").equals("oneWeek")
    && request.getParameter("timers") != "") {// 如果时间是选择的是"一周内"
   date1 = ca7.getTime();
   String Date7 = from.format(date1);
   timers=request.getParameter("timers");
   sb.append("and j.stime BETWEEN '").append(Date7).append("'and'")
     .append(nowTimer).append("'");
  } else if (request.getParameter("timers").equals("oneMonery")
    && request.getParameter("timers") != "") {// 如果时间是选择的是"一月"
   date1 = ca30.getTime();
   String Date30 = from.format(date1);
   timers=request.getParameter("timers");
   sb.append("and j.stime BETWEEN '").append(Date30).append("'and'")
     .append(nowTimer).append("'");
  } else if (request.getParameter("timers").equals("threeMonery")
    && request.getParameter("timers") != "") {// 如果时间是选择的是"三月内"
   date1 = ca90.getTime();
   String Date90 = from.format(date1);
   timers=request.getParameter("timers");
   sb.append("and j.stime BETWEEN '").append(Date90).append("'and'")
     .append(nowTimer).append("'");
  }
  /** **模糊查询,根据上面任意条件**** */
  if (request.getParameter("likeName") != "") {
   likeName = request.getParameter("likeName");
   sb.append(" and j.title like '%").append(likeName).append("%'");
  }
  /** 根据顺序查询* */
  if (request.getParameter("sx") != ""
    && request.getParameter("sx").equals("asc")) {// 正序
   sx = request.getParameter("sx");
   sb.append(" ORDER BY j.logtime ").append(sx);
  } else {// 倒叙
   sb.append(" ORDER BY j.logtime desc");
  }
  hql = sb.toString();

  // String hql="FROM Joy1matchlist j WHERE j.asmbr=0 ORDER BY j.logtime
  // DESC";

  try {
   List<Joy1matchlist> hotList = bsService.queryHotBs();
   ActionContext.getContext().getSession().put("hotList", hotList);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  // 分页的pageBean,参数pageSize表示每页显示记录数,page为当前页
  this.pageBean = bsService.queryForPage(5, page, hql);
  request.setAttribute("category", category);
  request.setAttribute("ctcod", ctcod);
  request.setAttribute("timers", timers);
  request.setAttribute("likeName", likeName);
  request.setAttribute("sx", sx);
  request.setAttribute("sumPage", pageBean.getTotalPage());
  return "benye";
 }

 

html:

<link rel="stylesheet" href="<%=path %>/myjs/bs/game_list.css" type="text/css"></link>
<script type="text/javascript" src="<%=path %>/style/jquery-1.4.2.js"></script>

<script type="text/javascript">
 function show_color(){
  var p;
   if(document.getElementById("page")!=null && document.getElementById("page")!=""){
    p=document.getElementById("page").value;
   }
   if(p!=null || p!=""){
    page=parseInt(p);
   }
   var category="<%=request.getAttribute("category")%>";//项目
   var ctcod="<%=request.getAttribute("ctcod")%>";//城市
   var timers="<%=request.getAttribute("timers")%>";//时间
   if(category=="" || category=="null") category="全部";
   //city
   if(ctcod=="" || ctcod=="null") ctcod="全部";
   if(ctcod=="010") ctcod="北京市";
   if(ctcod=="021") ctcod="上海市";
   if(ctcod=="020") ctcod="广州市";
   if(ctcod=="025") ctcod="南京市";
   if(ctcod=="000") ctcod="其他";
   //timer
   if(timers=="" || timers=="null") timers="全部";
   if(timers=="oneWeek") timers="一周内";
   if(timers=="oneMonery") timers="一月内";
   if(timers=="threeMonery") timers="三月内";

   var array_xm = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
   var array_cs = [0, 1, 2, 3, 4, 5];
   var array_sj = [0, 1, 2, 3]; 
   for (var index in array_xm) {
    if($("#xm"+index).html()==category){
     $("#xm"+index).css("background-color","#FF6600").css("color","#fff");
    }
   }
   for (var index in array_cs) {
    if($("#cs"+index).html()==ctcod){
     $("#cs"+index).css("background-color","#FF6600").css("color","#fff");
    }
   }
   for (var index in array_sj) {
    if($("#sj"+index).html()==timers){
     $("#sj"+index).css("background-color","#FF6600").css("color","#fff");
    }
   }
   
   var sumPage="<%=request.getAttribute("sumPage")%>"//总记录数
   var count=sumPage-4;//出现的组数(最后的一组)
   var n=new Array();
   var num5=0;//一组为5个数
   var j=0;//增加次数
   //把长度赋值给数组
   for(var i=1;i<sumPage;i++){
    n[i]=i;
   }
   j=page-3;
   //page>4时 1,2,3,4,5
   if(sumPage>=5){
     if(page<5){
     //获取数组的前5个值
     j=1;
     for(var i=0;i<5;i++){
      num5=n[i];
      var link_num=num5+j;
      $("#page_link").append("<a href='javascript:currPage("+(i+1)+")' id='link_"+(i+1)+"'>"+link_num+"</a>");
      if($("#link_1").html("NaN")){
       $("#link_1").html("1");
      }
     }
    }
    if(page>=5 && page<sumPage){//page>5时
     for(var i=0;i<5;i++){
      num5=n[i];
      var link_num=num5+j;
      $("#page_link").append("<a href='javascript:currPage("+(i+j)+")' id='link_"+(i+j)+"'>"+link_num+"</a>");
      if($("#link_"+(i+j)).html("NaN")){
       $("#link_"+(i+j)).html(i+j);
      }
     }
    }
    if(page==sumPage){//当前页==总记录数时
     for(var i=0;i<5;i++){
      num5=n[i];
      var link_num=num5+count;
      $("#page_link").append("<a href='javascript:currPage("+(i+count)+")' id='link_"+(i+count)+"'>"+link_num+"</a>");
      if($("#link_"+(i+count)).html("NaN")){
       $("#link_"+(i+count)).html(i+count);
      }
     }
    }
   }else{
    if(sumPage==1){
     $("#page_link").append("<a href='javascript:currPage(1)' id='link_1'>1</a>");
       
    }else{
     for(var i=0;i<n.length;i++){
      num5=i+1;
       $("#page_link").append("<a href='javascript:currPage("+(i+1)+")' id='link_"+(i+1)+"'>"+num5+"</a>");
       if($("#link_1").html("NaN")){
        $("#link_1").html("1");
       }
     }
    }
   }
   for(var i=0;i<sumPage;i++){
    n[i]=i;
    if($("#link_"+(n[i]+1)).html()==page){
     $("#link_"+(n[i]+1)).css("background-color","#FF6600").css("color","#fff").css("border-color","#ff6600").css("font-weight","bold");
    }
   }
  }
</script>


</head>
<body οnlοad="show_color()">

<form action="queryByPrarmate.action" method="post" name="myForm" >
<dt>按项目:</dt>
<dd><a  href="javascript:showFindxm('全部')" id="xm0">全部</a><a href="javascript:showFindxm('足球')" id="xm1">足球</a><a href="javascript:showFindxm('篮球')" id="xm2">篮球</a><a href="javascript:showFindxm('网球')" id="xm3">网球</a><a href="javascript:showFindxm('羽毛球')" id="xm4">羽毛球</a><a href="javascript:showFindxm('乒乓球')" id="xm5">乒乓球</a><a href="javascript:showFindxm('排球')" id="xm6">排球</a><a href="javascript:showFindxm('台球')" id="xm7">台球</a><a href="javascript:showFindxm('游泳')" id="xm8">游泳</a><a href="javascript:showFindxm('田径')" id="xm9">田径</a><a href="javascript:showFindxm('高尔夫')" id="xm10">高尔夫</a><a href="javascript:showFindxm('其他')" id="xm11">其他</a></dd></dl>
<input type="hidden" id="category" name="category" value="<s:property value="#request.category" />"/>
<dl style="display:block">
<dt>按城市:</dt>
<dd><a  href="javascript:showFindcs('全部')" id="cs0">全部</a><a href="javascript:showFindcs('010')" id="cs1">北京市</a><a href="javascript:showFindcs('021')" id="cs2">上海市</a><a href="javascript:showFindcs('020')" id="cs3">广州市</a><a href="javascript:showFindcs('025')" id="cs4">南京市</a><a href="javascript:showFindcs('000')" id="cs5">其他</a></dd></dl>
<input type="hidden" id="ctcod" name="ctcod" value="<s:property value="#request.ctcod" />"/>
<dl style="display:block">
<dt>按时间:</dt>
<dd><a  href="javascript:showFindsj('全部')" id="sj0">全部</a><a href="javascript:showFindsj('oneWeek')" id="sj1">一周内</a><a href="javascript:showFindsj('oneMonery')" id="sj2">一月内</a><a href="javascript:showFindsj('threeMonery')" id="sj3">三月内</a></dd></dl>
<input type="hidden" id="timers" name="timers" value="<s:property value="#request.timers" />"/>
<dl style="display:block">
<dt>关键字:</dt>
<dd><input name="likeName" type="text" id="likeName" οnkeypress= "if(event.keyCode==39)event.keyCode=0;" /><input class="button" name="" type="button" value="筛 选" οnclick="showLike()" /></dd></dl>
</div>

 

<s:iterator value="pageBean.list" status='st'>
<li><div class="game_img"><a href="<%=path %>/bs_queryBsById.action?id=<s:property value="id" />&type=0"><img src="<s:property value='imgsrc' />" /></a></div>
<div class="related_c"><p><a href="<%=path %>/bs_queryBsById.action?id=<s:property value="id" />&type=0"><s:property value="title" /></a></p><p>分类:<s:property value="category" /></p><p>场馆:<s:property value="unname" /></p><p>时间:<s:property value="stime.toString().substring(0,stime.toString().length()-5)" /></p><p>优体价:<s:property value="utivalue" />元</p><p>原价:<s:property value="srcvalue" />元</p></div><a href="<%=path %>/bs_queryBsById.action?id=<s:property value="id" />&type=0"><span class="button">立即购买</span></a></li>
</s:iterator>

 

 

<div class="page">
   <input type="hidden" id="page" name="page" value="<s:property value="pageBean.currentPage" />"/>
   <input type="hidden" id="sumNum" name="sumNum" value="<s:property value="pageBean.totalPage" />"/>
<a href="javascript:first()">首页</a>
<a href="javascript:last()">上一页</a>

 <span id="page_link"></span>


<a href="javascript:next() ">下一页</a>
<a href="javascript:end()">尾页</a>
 共<s:property value="pageBean.totalPage" />页

 转到<input id="goPages" type="text" />页<input class="page_button"   οnclick="goPage(${pageBean.totalPage })" type="button" value="确定" /></div>
</form>

 

 

还有段JS,控制的是 上下页,需要从新建立Js

var page=0;
 //直接跳转到指定页面
function goPage(endPage){
  var reg = /^(?:0|[1-9][0-9]?|100)$/;

 if(!reg.test(document.getElementById("goPages").value)){
  alert("页码填写有误!");
  document.getElementById("goPages").value="";
 }else if(
  parseInt(document.getElementById("goPages").value)>endPage || document.getElementById("goPages").value==0){
  alert("此页不存在!");
  document.getElementById("goPages").value="";
 }else{
  document.getElementById("page").value=document.getElementById("goPages").value;
  document.myForm.submit();
 }
 
}

  
  //下一页
  function next(){
   var endNum=document.getElementById("sumNum").value;
   if(document.getElementById("page").value==endNum){
    alert("已经是尾页了");
    return;
   }else{
    page+=1;
    document.getElementById("page").value=page;
    document.myForm.submit();
   }
   
  }
  //上一页
  function last(){
   if(document.getElementById("page").value==1){
    alert("已经是首页了");
    return;
   }else{
    page-=1;
    document.getElementById("page").value=page;
    document.myForm.submit();
   }
  }
  //首页
  function first(){
    document.getElementById("page").value=1;
    document.myForm.submit();
  }
  //尾页
  function end(){
    var endNum=document.getElementById("sumNum").value;
    document.getElementById("page").value=endNum;
    document.myForm.submit();
  }
  //每次查出按第一页显示
  function showBtn(){
   document.getElementById("page").value=1;
   
  }
  //xm
  function showFindxm(xm){
   document.getElementById("category").value=xm;
   showBtn();
   document.myForm.submit();
  }
  function showFindcs(cs){
   document.getElementById("ctcod").value=cs;
   showBtn();
   document.myForm.submit();
  }
  function showFindsj(sj){
   document.getElementById("timers").value=sj;
   showBtn();
   document.myForm.submit();
  }
  //like
  function showLike(){
   var likeNames=document.getElementById("likeNames").value;
   var likeName=document.getElementById("likeName").value;
   if(likeName!=null && likeName!=""){ 
    showBtn();   
    document.myForm.submit();
   }else{
    likeNames=document.getElementById("likeName").value=likeNames;
    showBtn();
    document.myForm.submit();
   }
  }
  //排序
  function showSx(sx){
   document.getElementById("sx").value=sx;
   document.myForm.submit();
  }
 
 //currPage
 function currPage(num){
  document.getElementById("page").value=num;
  document.myForm.submit();
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值