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 如上流程。
(大量查询不影响速度,翻页时取数据)