struts2标签和hibernate实现分页

jsp:
<div  id="a_mainboxb">
    	<table border="0.5" bordercolor="#666666" style="font-size:12px">
		    <tr>
			   <th>主题名称</th>
			   <th>创建时间</th>
			   <th>状态</th>
			   <th>分类</th>
			   <th>查看</th>
		    </tr>
			<s:iterator value="titles">
			   <tr>
			      <td><s:property value="titleName"/></td>
			      <td width=150px><s:date name="beginTime" format="yyyy-MM-dd HH:mm:ss" /></td>
			      <td width=30px><s:property value="titleStatu"/></td>
			      <td width=30px><s:property value="titleSort"/></td>
			      		<s:url id="url_view" value="showone">
         					<s:param name="id" value="titleId"></s:param>
    					 </s:url>
			      <td width=30px><s:a href="%{url_view}">查看</s:a></td>
			   </tr>
			</s:iterator>
  </table>
     <s:url id="url_pre" value="show.action">
         <s:param name="pageNow" value="pageNow-1"></s:param>
     </s:url>
     <s:url id="url_next" value="show.action">
         <s:param name="pageNow" value="pageNow+1"></s:param>
     </s:url>
     <s:url id="url_first" value="show.action"><!-- 分页首页 -->
         <s:param name="pageNow" value="1"></s:param>
     </s:url>
     <s:url id="url_last" value="show.action"><!-- 分页尾页 -->
         <s:param name="pageNow" value="totalpages"></s:param>
     </s:url>
     <s:a href="%{url_first}">首页</s:a> 
     <s:a href="%{url_pre}">上一页</s:a>
     <s:a href="%{url_next}">下一页</s:a> 
     <s:a href="%{url_last}">尾页</s:a>
          共<s:property value="totalpages"/>页 
          当前第<s:property value="pageNow"/>页
  	</div>

show.action对应的Action:
package shi.vote.pages;

import java.util.List;

import shi.vote.model.VoteTitle;
import com.opensymphony.xwork2.ActionSupport;

public class ShowAction extends ActionSupport {
	
	private List titles ;
    private int pageSize =3; //每页显示3条记录
    private int totalrows;   //总条数
    private int totalpages;  //总页数
    private int pageNow=1;   //当前页
	private PageDAO pageDAO = new PageDAO();
	
	public List getTitles() {
		return titles;
	}

	public void setTitles(List titles) {
		this.titles = titles;
	}

	public int getPageSize() {
		return pageSize;
	}

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

	public int getTotalrows() {
		return totalrows;
	}

	public void setTotalrows(int totalrows) {
		this.totalrows = totalrows;
	}

	public int getTotalpages() {
		return totalpages;
	}

	public void setTotalpages(int totalpages) {
		this.totalpages = totalpages;
	}

	public PageDAO getPageDAO() {
		return pageDAO;
	}

	public void setPageDAO(PageDAO pageDAO) {
		this.pageDAO = pageDAO;
	}
	
	public void calPages()//计算总页数
    {
    	int p=totalrows/pageSize;
    	if((totalrows%pageSize)>0)
    	{
    		p++;
    	}
    	totalpages=p;
    }
	
	public int getPageNow() {
		return pageNow;
	}

	public void setPageNow(int pageNow) {
		this.pageNow = pageNow;
	}

	public String execute() throws Exception {
		try
		{
			totalrows=pageDAO.getRows("select count(*) from VoteTitle");
			calPages();
			int currentrow=0;
			if (pageNow<=1)//向前翻页是否超出范围
			{
				currentrow=0;
			}
			else
			{
				if(pageNow>totalpages)//向后翻页是否超出范围
					pageNow=totalpages;
				currentrow=(pageNow-1)*pageSize;
			}
			String hql="select title from VoteTitle title order by title.titleId";
			titles = pageDAO.findWithPage(pageSize, currentrow,hql);
			System.out.println("titles大小"+titles.size());
			return SUCCESS ;
		}
		catch(Exception e)
		{
			e.printStackTrace();
			return ERROR;
		}
	}
}


 

一下部分是我写的数据库访问类

package shi.vote.pages;

import java.util.*;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import shi.vote.tools.HibernateUtil;
/*
 * 分页使用的数据库查询类
 */
public class PageDAO 
{
	//获取查询内容
	public List findWithPage(int pageSize,int startRow,String hql)throws HibernateException
	{
		List pagelist=null;
		Transaction tx=null;
		try {
			Session session=HibernateUtil.currentSession();
			tx=session.beginTransaction();
			Query q=session.createQuery(hql);
			//"select title from VoteTitle title order by title.titleId"
			q.setFirstResult(startRow);
			q.setMaxResults(pageSize);
			pagelist=q.list();
			tx.commit();
		} catch (HibernateException he) {
			if(tx!=null)
				{tx.rollback();}
			throw he;			
		}
		finally {
			HibernateUtil.closeSession();
		}
		return pagelist;
	}
	//获取查询条件行数
	public int getRows(String query) throws HibernateException
	{
		int totalRows = 0;
		Transaction tx = null;
	try {
		Session session = HibernateUtil.currentSession();
		tx = session.beginTransaction();
		//totalRows=((Integer)session.createQuery(query).iterate().next()).intValue();//获得总行数
		Object ob=(session.createQuery(query).iterate().next());
		totalRows=Integer.parseInt(ob.toString());
		System.out.println("输出数字"+totalRows);
		tx.commit();
	} 
	catch (HibernateException he) 
	{
		if (tx != null)
		{tx.rollback();}
		throw he;
	}
	catch(Exception e)
	{
		e.printStackTrace();
	}
	finally 
	{
		HibernateUtil.closeSession();
	}
	return totalRows;
	}

}

使用的时候,先访问2代码段的Action,Action调用3代码段的数据库查询,然后再把结果集返回给1 jsp。

在jsp每点一次翻页,重新调用一次Action 如上流程。

(大量查询不影响速度,翻页时取数据)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值