struts2标签和hibernate实现分页

来源:互联网 发布:linux php源码 编辑:程序博客网 时间:2024/05/07 04:00
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 如上流程。

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


 

原创粉丝点击