`
devil13th
  • 浏览: 42158 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts1 分页

阅读更多

基本思路: 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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics