基本思路: struts1 用的是ActionForm 和 Action 所以分页的时候可以再ActionForm上做文章,因为form中封装分页的一些信息,然后在action引入的service中进行分页就可以了
在需要分页的页面中加入标签
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
分页的公共页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="taglib.jsp"%> <script type="text/javascript"> function commonAll(uurl) {//点击分页页号以及上一页下一页时候自动提交表单 document.forms[0].action=uurl; document.forms[0].submit(); } function ForwardPage(url){ var cur=document.getElementById("curpage").value; var max=document.getElementById("max").value; if(cur==0){ document.getElementById("curpage").value=1; cur=1; } if(max==0){ max=1; } if(isNaN(cur)||cur<1){ document.getElementById("curpage").value=1; } if(parseInt(cur)>parseInt(max)){ document.getElementById("curpage").value=max; } commonAll(url); } function ckPage(o){ if(isNaN(o.value) || o.value<0){ o.value = 1; } } </script> <tiles:importAttribute /> <bean:define id="fname" name="formName" scope="page" /> <bean:define id="aname" name="actionName" scope="page" /> <bean:define id="pagename" name="pageName" scope="page" /> <bean:define id="maxpage" name="<%=(String)fname%>" property="maxpage" /> <bean:define id="curpage" name="<%=(String)fname%>" property="curpage" /> <% int cur = ((Integer)curpage).intValue(); //当前页 int max = ((Integer)maxpage).intValue(); //最大页数 %> 共 <bean:write name="<%=(String)fname%>" property="listsize" /> 条 <a>页次:<%=cur%>/<%=max%></a> <%if(cur!=1){%><a href="#" onClick="commonAll('<%=(String)aname%>.do?operate=<%=pagename%>&curpage=<%=Integer.toString(cur-1)%>')" > 上一页<%}%></a> <% int base = cur/10; int count=0; if((base+1)*10>=max){ count=max; }else{ count=(base+1)*10; } for(int j=base != 0 ? base*10-1 : base*10;j<count;j++){%> <a href="#" onClick="commonAll('<%=(String)aname%>.do?operate=<%=pagename%>&curpage=<%=j+1%>')" <%if(cur==j+1){%>class="pageOn"<%}%>><%=j+1%></a> <% } if(max!=0&&max>cur){ %> <a href="#" onClick="commonAll('<%=(String)aname%>.do?operate=<%=pagename%>&curpage=<%=Integer.toString(cur+1)%>')" >下一页</a><%}%>
在需要分页的页面中引入页面的代码如下:
<tiles:insert page="page.jsp"> <tiles:put name="formName" value="firstCheckUpForm" /> <tiles:put name="actionName" value="vCardApplyAuditing" /> <tiles:put name="pageName" value="vCardApplyAuditingQuery" /> </tiles:insert>
<tiles:insert page="frontPageBtn.jsp">引入frontPageBtn.jsp页面
<tiles:put name="formName" value="firstCheckUpForm" />ActionForm名称(struts配置文件中的form的name)
<tiles:put name="actionName" value="vCardApplyAuditing" />Action的struts配置名称(提交的地址 .do前面的路径)
<tiles:put name="pageName" value="vCardApplyAuditingQuery" />dispatchAction的parameter参数的值(方法名称)
dao.java中定义分页查询的方法
//hql 查询 public List findByHql(String hql) { try { List list = getHibernateTemplate().find(hql); if (list.isEmpty()) { return null; } else { return list; } } catch (Exception re) { logger.log(Level.SEVERE, "查询数据库错误" + re.getMessage()); return null; } } //sql 查询 public List findBySql(final String sql) { return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) { Query query = session.createSQLQuery(sql); return query.list(); } }); } /** * 利用Hibenate回调,分页程序 * @param SQL语句(可以使带参数的,也可以是不带参数的 (带参数指的是“?”)) * @param obj SQL的参数 对应SQL中的“?” * @param currpage 当前页码 * @param rowsNum 查询全部结果条数 * @param maxResult 每一页的结果数量 */ //sql 分页查询 public List findPageSql(final Object[] obj, final String hql, final int currpage, final int rowsNum, final int maxResult) { return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException, SQLException { Query query = s.createSQLQuery(hql); if (obj != null) { for (int i = 0; i < obj.length; i++) { Class theClass = obj[i].getClass(); if (theClass.getName().equals("java.lang.String")) query.setString(i, (String) obj[i]); if (theClass.getName().equals("java.lang.Long")) query.setLong(i, (Long) obj[i]); if (theClass.getName().equals("java.sql.Date")) query.setDate(i, (Date) obj[i]); if (theClass.getName().equals("java.sql.Timestamp")) query.setTimestamp(i, (Timestamp) obj[i]); if (theClass.getName().equals("java.lang.Iterate")) query.setInteger(i, (Integer) obj[i]); } } //根据此条件查询记录条敄1�7 if (rowsNum != -1) { query.setFirstResult((currpage - 1) * maxResult); query.setMaxResults(maxResult); } List list = query.list(); return list; } }); } /** * 利用Hibenate回调,分页程序 * @param HQL语句(可以使带参数的,也可以是不带参数的 (带参数指的是“?”)) * @param obj hql的参数 对应hql中的“?” * @param currpage 当前页码 * @param rowsNum 查询全部结果条数 * @param maxResult 每一页的结果数量 */ //hql 分页查询 public List findPage(final Object[] obj, final String hql, final int currpage, final int rowsNum, final int maxResult) { return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException, SQLException { Query query = s.createQuery(hql); if (obj != null) { for (int i = 0; i < obj.length; i++) { Class theClass = obj[i].getClass(); if (theClass.getName().equals("java.lang.String")) query.setString(i, (String) obj[i]); if (theClass.getName().equals("java.lang.Long")) query.setLong(i, (Long) obj[i]); if (theClass.getName().equals("java.sql.Date")) query.setDate(i, (Date) obj[i]); if (theClass.getName().equals("java.sql.Timestamp")) query.setTimestamp(i, (Timestamp) obj[i]); if (theClass.getName().equals("java.lang.Iterate")) query.setInteger(i, (Integer) obj[i]); } } //根据此条件查询记录条数 if (rowsNum != -1) { query.setFirstResult((currpage - 1) * maxResult); query.setMaxResults(maxResult); } List list = query.list(); return list; } }); } /** * 利用Hibenate回调,分页程序 * @param sql语句(是不带参数的 (不带参数指的是“?”)) * @param currpage 当前页码 * @param rowsNum 查询全部结果条数 * @param maxResult 每一页的结果数量 */ //不带参数的sql查询(直接传入生成的sql语句) public List findPageSql( final String sql,final int currpage, final int rowsNum, final int maxResult) { return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException, SQLException { Query query = s.createSQLQuery(sql); if (rowsNum != -1) { query.setFirstResult((currpage - 1) * maxResult); query.setMaxResults(maxResult); } List list = query.list(); return list; } }); }
定义一个公共的PubForm用于分页,项目中用到的ActionForm可以继承此PubForm
在PubForm定义3个变量
private int maxpage = 1;最大页数
private int curpage = 1;当前页
private int listsize = 0;所有记录的数量
自动生成setter getter方法
service中调用分页
public List queryApply(FirstCheckUpForm form, int pageItems){//pageItems : 每页条数 String sql = "select " + " ra.ID," + // 0 申请id " ra.YCSID," + // 1 验船师id " ra.STATUS," + // 2 申请状态 " ra.TYPE," + //3 申请种类 " ra.CHECKUPID," + //4 审核id " ra.CREATETIME," + // 5 申请时间 " y.IDNO," + // 6 验船师身份证 " y.YCSNAME," + // 7 验船师姓名 " y.SEX," + // 8 验船师性别 " y.CERTNO," + // 9 证书号 " y.LEVELS " + // 10 证书等级 " from REMAKEAPPLY ra left join YCSINFO y on y.YCSID = ra.YCSID" + " order by ra.CREATETIME desc"; List l = dao.findBySql(sql); if(l != null){ int rowsNum = l.size(); int temp = rowsNum % pageItems; //取模 int pageNum = 0; if (temp > 0) {//如果有余数 pageNum = rowsNum / pageItems + 1; } else if (temp == 0) pageNum = rowsNum / pageItems; form.setListsize(rowsNum);//设置总记录条数 form.setMaxpage(pageNum);// 设置最大页数 //return this.findObjs(form.getCurpage(), rowsNum, pageItems, map); return dao.findPageSql(sql, form.getCurpage(), rowsNum, pageItems); }else{ return null; } };
所有文件见附件
作者:ThirdteenDevil 十三妖
qq: 181907667