【J2EE】jsp分页问题

我们的javaweb项目中在分页问题上似乎没有像在php和asp上那么容易,今天就来一探究竟。

0.分页工具类

在写分页的工具类之前,我们需要搞清楚分页中应该有哪些属性和属性之间的关系。
package util;

import java.util.List;
import org.springframework.stereotype.Component;

/**
 * 分页工具类
 *
 */
@Component
public class Pager<T> {

	private int pageIndex = 0;//索引
	
	private int pageSize = 10;//页面大小

	private int pageNum = 1;//页码
	
	private int count;//总记录数
	
	private int pageCount;//总页数
	
	private List<T> list;//返回分页的集合
	
	private T entity;//pager对应的实体,可以用来做查询搜索时的分页

	/**
	 * 获取当前页面索引 = (当前页号 - 1)*页面大小
	 */
	public int getPageIndex() {
		return (pageNum -1) * pageSize;
	}
	
	/**
	 * 获取总页数 =(总记录数 -1)/页面大小 + 1
	 */
	public int getPageCount() {
		return (count - 1) / pageSize + 1;
	}


	public int getPageNum() {
		return pageNum;
	}

	public void setPageNum(int pageNum) {
		this.pageNum = pageNum;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}
	
	public int getPageSize() {
		return pageSize;
	}


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

	public List<T> getList() {
		return list;
	}


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


	public T getEntity() {
		return entity;
	}


	public void setEntity(T entity) {
		this.entity = entity;
	}

}
工具类写好之后我们来看分页工具类怎么来使用

1.数据库访问层

	@Override
	public Pager<Shops> queryByPager(final Pager<Shops> pager) {
		List list = getHibernateTemplate().find("SELECT COUNT(s) FROM Shops s");
		int count = Integer.parseInt(list.get(0) + "");
		//给总记录数赋值
		pager.setCount(count);
		//查询数据库
		List<Shops> l = getHibernateTemplate().executeFind(new HibernateCallback<List<Shops>>() {
			@Override
			public List<Shops> doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query query = session.createQuery("FROM Shops");
				//起点即是pager的当前索引,默认值是0,即从表头开始
				query.setFirstResult(pager.getPageIndex());
				//将页面大小(默认为10)设置需要的结果集大小
				query.setMaxResults(pager.getPageSize());
				List<Shops> shopsList = query.list();
				return shopsList;
			}
		});
		//给分页后的集合赋值
		pager.setList(l);
		return pager;
	}

2.业务逻辑层代码(传球)

	@Override
	public Pager<Shops> queryByPager(Pager<Shops> pager) {
		return shopsDAO.queryByPager(pager);
	}

这里业务逻辑层啥也没干,传球到表现层。

3.表现层

action中 shop_list返回结果shops-list.jsp
	public String list(){
		pager = shopsService.queryByPager(pager);
		return "shops_list";
	}
shops-list.jsp
    <table class="table table-hover text-center">
      <tr>
        <th width="100" style="text-align:left; padding-left:20px;">ID</th>
        <th>店铺名称</th>
        <th>店铺类别</th>
        <th>店铺地址</th>
        <th>联系人</th>
        <th>联系电话</th>
        <th width="10%">创建时间</th>
        <th width="310">操作</th>
      </tr>
      <volist name="list" id="vo">
      	<s:iterator value="#request.pager.list" id="shops" >
        <tr>
          <td style="text-align:left; padding-left:20px;"><input type="checkbox" name="id[]" value="" />
           ${shops.shopId }</td>
          <td width="10%">${shops.shopName}</td>
          <td>${shops.categories.categoryTitle} </td>
          <td><font color="#00CC99">${shops.shopAddress }</font></td>
          <td>${shops.shopContactname }</td>
          <td>${shops.shopContacttel }</td>
          <td>${shops.shopCreatetime }</td>
          <td><div class="button-group"> <a class="button border-main" href="add.html"><span class="icon-edit"></span> 修改</a> <a class="button border-red" href="javascript:void(0)" οnclick="return del(1,1,1)"><span class="icon-trash-o"></span> 删除</a> </div></td>
        </tr>
        </s:iterator>
      <tr>
        <td style="text-align:left; padding:19px 0;padding-left:20px;"><input type="checkbox" id="checkall"/>
          全选 </td>
        <td colspan="7" style="text-align:left;padding-left:20px;"><a href="javascript:void(0)" class="button border-red icon-trash-o" style="padding:5px 15px;" οnclick="DelSelect()"> 删除</a> 
          
      </tr>
      <tr>
        <td colspan="8">
        <div class="pagelist">
        	${pager.count }条,共${pager.pageCount }页    
        	<c:if test="${pager.pageNum > 1 }">
        		<a href="shops_list.html?pager.pageNum=1">首页</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum-1 }">上一页</a>
        	</c:if>
        	<c:if test="${pager.pageNum == 1 }">
        		<span class="current">${pager.pageNum  }</span>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +1}">${pager.pageNum + 1}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +2}">${pager.pageNum + 2}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +3}">${pager.pageNum + 3}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +4}">${pager.pageNum + 4}</a>
        	</c:if>
        	<c:if test="${pager.pageNum == 2 }">
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -1}">${pager.pageNum -1}</a>
        		<span class="current">${pager.pageNum  }</span>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +1}">${pager.pageNum + 1}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +2}">${pager.pageNum + 2}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +3}">${pager.pageNum + 3}</a>
        	</c:if>
        	<c:if test="${pager.pageNum > 2 &&  pager.pageNum < pager.pageCount -1}">
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -2}">${pager.pageNum-2}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -1}">${pager.pageNum -1}</a>
        		<span class="current">${pager.pageNum  }</span>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +1}">${pager.pageNum + 1}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +2}">${pager.pageNum + 2}</a>
        	</c:if>
        	<c:if test="${pager.pageNum == pager.pageCount -1 }">
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -3}">${pager.pageNum -3}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -2}">${pager.pageNum-2}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -1}">${pager.pageNum -1}</a>
        		<span class="current">${pager.pageNum  }</span>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum +1}">${pager.pageNum + 1}</a>
        	</c:if>
        	<c:if test="${pager.pageNum == pager.pageCount }">
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -4}">${pager.pageNum-4}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -3}">${pager.pageNum -3}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -2}">${pager.pageNum-2}</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum -1}">${pager.pageNum -1}</a>
        		<span class="current">${pager.pageNum  }</span>
        	</c:if>
        	
        	<c:if test="${pager.pageNum < pager.pageCount}">
        		<a href="shops_list.html?pager.pageNum=${pager.pageCount }">尾页</a>
        		<a href="shops_list.html?pager.pageNum=${pager.pageNum+1 }">下一页</a>
        	</c:if>
         	
        </div></td>
      </tr>
    </table>

4.效果展示





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值