pager-taglib分页控件的使用总结
2012-06-08 11:17
357 查看
最近做一个项目使用了pager-taglib分页控件,总结如下:
数据查询分页时的代码
action调用分页函数
在上面这段代码中,我使用jstl标签,设置了如果页数大于1,才显示分页,否则的话不显示分页。
通过上述的一番折腾,已经可以正确分页显示了。接下来就完善一下。
由于在很多情况下,分页使用的是列表,经常涉及到根据条件查询,而pager-taglib分页却是使用URL的方式来获取下一页的数据,如果不把查询条件附带在URL中,那么在分
页时,就不能获取到正确的数据,必须使用<pg:param/>标签把查询的内容附加在URL中带入action进行查询。但是在国内使用,避免不了查询条件中有中文部分,但是中文
直接附加在URL中,肯定是不对的,因为pager标签和action的编码方式不同,一个是UTF-8,一个是根据本地操作系统编码,对于英文来讲是没有问题的,对于双字节就有问
题了。所以需要把查询条件进行编码。
编码如下:
的时候,就会以"&pStaffName=张三"的形式回到服务端。
这样的内容送到服务端,并不能直接通过"response.getParamater("pStaffName")"直接引用,还必须对这些参数进行解码,
解码的代码如下:
value=request.getParameter("pStaffName");
if(value!=null && !value.isEmpty()){
value=CommFunc.toUtf8String(value);
pStaffName=java.net.URLDecoder.decode(value,"UTF-8");
}[/code]把传过来的参数像上面那样解码后,传给查询部分作为查询条件,就可以做到在分页的时候保留查询条件了。
[/code]
附:用到的一个函数代码,这段代码是从网上找到的。
下载
直接到pager-taglib官网下载,下载地址为:http://jsptags.com/tags/navigation/pager/download.jsp,下载的是一个.WAR文件,可以使用WINRAR解压。解压后直接到 WEB-INF\lib\目录下把pager-taglib.jar拷贝到自己的工程的lib下。
定义一个分页类
/** * TODO * Pager.java * Administrator2012-4-13 */ package com.pde.web.common; import java.util.List; /** * @author Administrator * */ public class Pager { private long offset; //本页从记录的第几条开始 private long total; //总记录条数 private List list; //返回的数据队列 private long pageTotal; //总页数 public long getOffset() { return offset; } public void setOffset(long offset) { this.offset = offset; } public long getTotal(){ return total; } public void setTotal(long total){ this.total=total; } public List getList(){ return list; } public void setList(List list){ this.list=list; } public long getPageTotal(){ return pageTotal; } public void setPageTotal(long pageTotal){ this.pageTotal=pageTotal; } }
数据查询分页时的代码
/** * 返回查询到的人员信息, * sWhere 查询条件 * offset 记录起始索引 * pageSize 一页包含多少条记录 */ public Pager getStaffList(String sWhere,int offset, int pageSize) { ArrayList<Staff> list=null; List<Map> mapList=null; String sql=""; Staff staff; Pager pager=null; long pageTotal; try{ list=new ArrayList<Staff>(); pager=new Pager(); try { sql="select Count(StaffID) from Staff " + "left outer join DicItems SexTable on SexTable.DictItemCode=Staff.Sex and SexTable.DictID='000002' " + "left outer join DicItems StaffClassTable on StaffClassTable.DictItemCode=Staff.StaffClass and StaffClassTable .DictId='000003'"; if(sWhere!=null && !sWhere.isEmpty()){ sql+=" where " + sWhere; } pager.setTotal(super.getTotalRecord(jdbcTemplate,sql)); pageTotal=pager.getTotal()/pageSize; if(pager.getTotal()%pageSize!=0){ pageTotal=pageTotal + 1; } pager.setPageTotal(pageTotal); if(pager.getTotal()<=offset){ offset=offset-pageSize; } pager.setOffset(offset); } catch (Exception e) { e.printStackTrace(); } sql="select StaffID,StaffName,StaffNo,BirthDate,Sex as SexCode," + "SexTable.DictItemDesc as SexName,PassNo,StaffClass as StaffClassCode," + "StaffClassTable.DictItemDesc as StaffClassName,UnitName,DeptName,Office," + "CoverDeptName,CoverDeptCode,ClinicNo from Staff " + "left outer join DicItems SexTable on SexTable.DictItemCode=Staff.Sex and SexTable.DictID='000002' " + "left outer join DicItems StaffClassTable on StaffClassTable.DictItemCode=Staff.StaffClass and StaffClassTable .DictId='000003'"; if(sWhere!=null && !sWhere.isEmpty()){ sql+=" where " + sWhere; } sql+=" order by inputTime desc"; mapList=jdbcTemplate.queryForList(super.getPagerSQL(sql, offset, pageSize)); for(Map map: mapList){ staff=new Staff(); staff.setStaffId((String)map.get("STAFFID")); staff.setStaffName((String)map.get("STAFFNAME")); staff.setStaffNo((String)map.get("STAFFNO")); if(map.get("BIRTHDATE")!=null){ staff.setBirthDate(Timestamp.valueOf(sf.format(map.get("BIRTHDATE")))); } staff.setSexCode((String)map.get("SEXCODE")); staff.setSexName((String)map.get("SEXNAME")); staff.setPassNo((String)map.get("PASSNO")); staff.setStaffClassCode((String)map.get("STAFFCLASSCODE")); staff.setStaffClassName((String)map.get("STAFFCLASSNAME")); staff.setUnitName((String)map.get("UNITNAME")); staff.setDeptName((String)map.get("DEPTNAME")); staff.setOffice((String)map.get("OFFICE")); staff.setCoverDeptCode((String)map.get("COVERDEPTCODE")); staff.setCoverDeptName((String)map.get("COVERDEPTNAME")); staff.setClinicNo((String)map.get("CLINICNO")); list.add(staff); } pager.setList(list); }catch(DataAccessException ex){ ex.printStackTrace(); } return pager; }
action调用分页函数
public String list() { int offset; int pageSize; String sWhere; try{ HttpServletRequest request = ServletActionContext.getRequest(); if (request.getParameter("pager.offset") == null) {//pager.offset,taglib标签自带的属性 offset = 0; } else { offset = Integer.parseInt(request .getParameter("pager.offset")); } if(request.getAttribute("maxPageItems")==null){ pageSize=10; }else{ pageSize = Integer.parseInt(request.getParameter("maxPageItems")); } getParamSet(); sWhere=getWhere(); setPager(staffDAO.getStaffList(sWhere, offset, pageSize)); setStaffClassList(dictItemDAO.getDictItemByDictId(SCDICTID)); setStaffList(getPager().getList()); }catch(Exception ex){ ex.printStackTrace(); } return "sucess"; }
JSP中的引用
在JSP文件的头上,添加标签引用:在页面需要用到分页的地方添加分页标签:<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager"%>
[code]
<c:if test="${pager.pageTotal>1}"> 共有<font color="red">${pager.total}</font>条记录 共<font color="red">${pager.pageTotal}</font>页 <pg:pager url="caseinfo!list.do" items="${pager.total}" maxPageItems="10" export="currentPageNumber=pageNumber"> <pg:param name="pStaffName" value='<%=request.getAttribute("sStaffName")==null? "":(URLEncoder.encode(request.getAttribute("sStaffName").toString(), "UTF-8")) %>'/> <pg:param name="pUnitName" value='<%=request.getAttribute("sUnitName")==null? "":(URLEncoder.encode(request.getAttribute("sUnitName").toString(), "UTF-8"))%>'/> <pg:param name="pDeptName" value='<%=request.getAttribute("sDeptName")==null? "":(URLEncoder.encode(request.getAttribute("sDeptName").toString(), "UTF-8")) %>'/> <pg:param name="pOffice" value='<%=request.getAttribute("sOffice")==null? "":(URLEncoder.encode(request.getAttribute("sOffice").toString(), "UTF-8")) %>'/> <pg:param name="pStarTime" value='<%=request.getAttribute("sStarTime")==null? "":(URLEncoder.encode(request.getAttribute("sStarTime").toString(), "UTF-8")) %>'/> <pg:param name="pEndTime" value='<%=request.getAttribute("sEndTime")==null? "":(URLEncoder.encode(request.getAttribute("sEndTime").toString(), "UTF-8")) %>'/> <pg:first><a href="${pageUrl}">首页</a></pg:first> <pg:prev><a href="${pageUrl}">前页</a></pg:prev> <pg:pages> <c:choose> <c:when test="${pageNumber eq currentPageNumber }"> <font color="red">${pageNumber }</font> </c:when> <c:otherwise> <a href="${pageUrl }">${pageNumber}</a> </c:otherwise> </c:choose> </pg:pages> <pg:next><a href="${pageUrl}">下页</a></pg:next> <pg:last><a href="${pageUrl}">尾页</a></pg:last> </pg:pager> </c:if>
在上面这段代码中,我使用jstl标签,设置了如果页数大于1,才显示分页,否则的话不显示分页。
通过上述的一番折腾,已经可以正确分页显示了。接下来就完善一下。
由于在很多情况下,分页使用的是列表,经常涉及到根据条件查询,而pager-taglib分页却是使用URL的方式来获取下一页的数据,如果不把查询条件附带在URL中,那么在分
页时,就不能获取到正确的数据,必须使用<pg:param/>标签把查询的内容附加在URL中带入action进行查询。但是在国内使用,避免不了查询条件中有中文部分,但是中文
直接附加在URL中,肯定是不对的,因为pager标签和action的编码方式不同,一个是UTF-8,一个是根据本地操作系统编码,对于英文来讲是没有问题的,对于双字节就有问
题了。所以需要把查询条件进行编码。
编码如下:
<pg:param name="pStaffName" value='<%=request.getAttribute("sStaffName")==null? "":(URLEncoder.encode(request.getAttribute("sStaffName").toString(), "UTF-8")) %>'/>通过这样对中文进行编码后,回传到action的汉字才是正确的。顺带说一句,在<pg:param>中的内容是带在URL后面作为参数发送到服务端的,就比如举例这句代码,在分页
的时候,就会以"&pStaffName=张三"的形式回到服务端。
这样的内容送到服务端,并不能直接通过"response.getParamater("pStaffName")"直接引用,还必须对这些参数进行解码,
解码的代码如下:
value=request.getParameter("pStaffName");
if(value!=null && !value.isEmpty()){
value=CommFunc.toUtf8String(value);
pStaffName=java.net.URLDecoder.decode(value,"UTF-8");
}[/code]把传过来的参数像上面那样解码后,传给查询部分作为查询条件,就可以做到在分页的时候保留查询条件了。
[/code]
附:用到的一个函数代码,这段代码是从网上找到的。
public static String toUtf8String(String s){ StringBuffer sb = new StringBuffer(); for (int i=0;i<s.length();i++){ char c = s.charAt(i); if (c >= 0 && c <= 255){sb.append(c);} else{ byte[] b; try { b = Character.toString(c).getBytes("utf-8");} catch (Exception ex) { System.out.println(ex); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) k += 256; sb.append("%" + Integer.toHexString(k).toUpperCase()); } } } return sb.toString(); }
相关文章推荐
- 分页pager-taglib使用指南
- JSP通用分页组件 pager-taglib使用
- Spring3.x_Struts2.x_Hibernate3.x整合之分页pager-taglib的简单使用
- pager-taglib分页处理的使用
- jsp的一套pager-taglib的使用总结
- pager-taglib分页标签使用方法
- Pager-taglib分页使用
- java中的分页(使用pager-taglib)
- Pager-taglib分页使用
- 分页框架(Pager-taglib)的使用及sitemesh的简单使用
- 使用pager-taglib插件实现SSH框架的分页显示功能,只翻页三出错
- 关于如何使用pager-taglib分页
- pager-taglib分页处理的使用
- 分页控件:pager-taglib与SpringMVC结合实例
- SqlPager分页控件的使用!
- pager-taglib分页的使用
- silverlight分页控件DataPager使用要点
- 购物网第一阶段总结笔记3:友情链接模块之 删除友情链接 和 分页控件的使用
- 使用pager-taglib分页案例
- pager-taglib分页标签使用方法