二,按我的步骤走,那就不会错,
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();
}