Velocity在html中的分页

本文详细解析了如何实现网页分页与导航功能,包括上一页、下一页、首页、末页的跳转逻辑,以及如何通过前端与后台交互实现数据分页展示。同时,介绍了PageUtil类用于计算总页数、获取当前页数据等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当前第<font color="red">[$page.pageNum]</font>页
#if($page.pageNum > 1)                 ##显示上一页处理  
#set($pageNum=$page.pageNum - 1)     ##必须在这里先做减法运算后将值赋给变量,如果下面直接pageNum=$pageNum - 1输出的是$pageNum - 1 运算符两边空格勿忘!
<a title="上一页" href="systemDictionaryDetail!list.action?pageNum=$pageNum&parentId=$!parentId">[上一页]</a>  
#end 
#if($page.pageNum >= 4)                  ##第一页控制  1...3 4 5
<a href="systemDictionaryDetail!list.action?pageNum=1&parentId=$!parentId">1</a><span>...</span>  
#end  
#foreach($i in [$page.indexStart..$page.indexEnd])  ##这个类似于 <!-- <c:forEach var="pagenum" begin="${page.foreachbegin}" end="${page.foreachend}"> -->
#if($i == $page.pageNum)
<font color="red">$i</font>
#else
<a href="systemDictionaryDetail!list.action?pageNum=$i&parentId=$!parentId">$i</a>
#end
#end
#if($page.pageNum < $page.allPageNum - 2)         ##最后一页的处理 17 18 19...20
<span>…</span><a href="systemDictionaryDetail!list.action?pageNum=$page.allPageNum&parentId=$!parentId" rel=start>$page.allPageNum</a>  
#end  
#if($page.pageNum != $page.allPageNum)            ##显示下一页处理  
#set($pageNum=$page.pageNum + 1)
<a title="上一页" href="systemDictionaryDetail!list.action?pageNum=$pageNum&parentId=$!parentId">[下一页]</a>
#end  
总共$page.allPageNum页
<input id="pageCount" type="text" size="1" ><input type="button" onclick="doPage()" value="转到"/>			
<script type="text/javascript">
		function doPage(){
		 var obj = document.getElementById("pageCount");
		 var pagenum = obj.value;
		 var allpagesize = ${page.allPageNum};
		 if(!pagenum.match("\\d+")){
		 	alert("请输入数字");
		 	return;
		 }else if(pagenum<1){
			pagenum = 1;
			window.location.href="systemDictionaryDetail!list.action?pageNum=1&parentId=$!parentId";
		}else if(pagenum > allpagesize ){
			pagenum = allpagesize;
			window.location.href="systemDictionaryDetail!list.action?pageNum=$page.allPageNum&parentId=$!parentId";
		}else{
			window.location.href="systemDictionaryDetail!list.action?parentId=$!parentId&pageNum="+pagenum;
		} 
		
	}
</script>

PageUtil里的代码:

public class PageUtil {
	private int allPageSize;// 数据库总条数(外部传入)
	private int pageNum;// 当前第几页(外部传入)
	private int pageShowSize = 5;// 每页多少条数据
	private int allPageNum;// 一共多少页
	private int selectStart;// 数据库的起始搜索位置
	private int indexStart;// 前台页面的起始索引
	private int indexEnd;// 前台页面的结束索引
	private List pageInfo;// 从数据库查询出来的数据

	public PageUtil(int allPageSize, int pageNum) {
		this.allPageSize = allPageSize;
		this.pageNum = pageNum;
		
		
		System.out.println("总共多少条    "+this.allPageSize);
		System.out.println("总共多少页 "+this.allPageNum);
		if (allPageSize % pageShowSize == 0) {
			this.allPageNum = this.allPageSize / this.pageShowSize;
		} else {
			this.allPageNum = this.allPageSize / this.pageShowSize + 1;
		}
		this.selectStart = (this.pageNum - 1) * this.pageShowSize;
		if (this.allPageNum < 3) {
			this.indexStart = 1;
			this.indexEnd = this.allPageNum;
		} else {
			this.indexStart = this.pageNum - 2;// 前台页面的起始页是当前页数-2  要和前台的第一页控制一样第一页控制大于多少,这里就得减去多少
			this.indexEnd = this.pageNum + 2;// 前台页面的结束页是当前页数+2
			if (this.indexStart < 1) {
				this.indexStart = 1;
				this.indexEnd = 5;
			} else if(this.indexEnd > this.allPageNum) {
				this.indexStart = this.allPageNum - 5;
				this.indexEnd = this.allPageNum;
			}
		}
	}

	public int getAllPageSize() {
		return allPageSize;
	}

	public void setAllPageSize(int allPageSize) {
		this.allPageSize = allPageSize;
	}

	public int getPageNum() {
		return pageNum;
	}

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

	public int getPageShowSize() {
		return pageShowSize;
	}

	public void setPageShowSize(int pageShowSize) {
		this.pageShowSize = pageShowSize;
	}

	public int getAllPageNum() {
		return allPageNum;
	}

	public void setAllPageNum(int allPageNum) {
		this.allPageNum = allPageNum;
	}

	public int getSelectStart() {
		return selectStart;
	}

	public void setSelectStart(int selectStart) {
		this.selectStart = selectStart;
	}

	public int getIndexStart() {
		return indexStart;
	}

	public void setIndexStart(int indexStart) {
		this.indexStart = indexStart;
	}

	public int getIndexEnd() {
		return indexEnd;
	}

	public void setIndexEnd(int indexEnd) {
		this.indexEnd = indexEnd;
	}

	public List getPageInfo() {
		return pageInfo;
	}

	public void setPageInfo(List pageInfo) {
		this.pageInfo = pageInfo;
	}

}

BaseDaoImpl实现类定义的查询方法:

public List getByHQL(final String hql, final Object[] values, final Integer start, final Integer max) {
		List list = (List)hibernateTemplate.execute(new HibernateCallback() {  //查询
			public Object doInHibernate(Session session) throws HibernateException,
					SQLException {
				Query query = session.createQuery(hql);
				if(values != null && values.length > 0){
					/*int n = 0;
					for(Object value : values){
						query.setParameter(n++, value);
					}*/
					for(int i = 0; i< values.length; i++){
						query.setParameter(i, values[i]);
					}
				}
				
				if(start != null && start >= 0){
					query.setFirstResult(start);
				}
				if(max != null){
					query.setMaxResults(max);
				}
				return query.list();
			}
		});
		return list;
	}
public int getCount(final String hql) {//查询总条数
		Long count = (Long)hibernateTemplate.execute(new HibernateCallback() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				Query query = session.createQuery(hql);
				if(hql != null && !"".equals(hql)){
					return query.list().get(0);
				}else{
					return null;
				}
			}
		});
		return count.intValue();
	}


在BaseServiceImpl实现类中注入Dao后定义查询方法:

public PageUtil getPage(String pageNum) {
	PageUtil page = null;
	int allPageSize = genericDao.getCount("select count(*) from "+clz.getSimpleName()+" obj");
	if(pageNum == null || "".equals(pageNum)){//表示第一次进入这个列表页面
		page = new PageUtil(allPageSize,1);
	}else{
		page = new PageUtil(allPageSize, Integer.parseInt(pageNum));
	}
	String hql = "from "+clz.getSimpleName()+" obj";
	page.setPageInfo(genericDao.getByHQL(hql, null, page.getSelectStart(),page.getPageShowSize()));
	return page;
}

在Action中只需要调用page = xxxService.getPage(pageNum)  将pageNum从前台页面传入即可






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值