那位大侠能给我一个Java通用的分页控件,我将非常感激。
其中最好能包含SQL Server2000,SQL Server2005,Oracle、MySql等很常用的一些数据库分页实现。
最好能加上一些实例,便于我使用。
其中最好能包含SQL Server2000,SQL Server2005,Oracle、MySql等很常用的一些数据库分页实现。
最好能加上一些实例,便于我使用。
我只有分页的代码。你看看吧,可能有用。
pager-taglib.jar这个是实现分页的 实现效果就如google分页效果一样
2.引入pager-taglib标签:<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
3.建立PagerModel类:
public class PagerModel {
/**
* 总记录数
*/
private int total;
/**
* 当前页结果集
*/
private List datas;
public List getDatas() {
return datas;
}
public void setDatas(List datas) {
this.datas = datas;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
}
4.pager业务逻辑部分:
public class AbstractManager extends HibernateDaoSupport {
public PagerModel searchHql(String hql){
return searchHql(hql,null,SystemContext.getOffset(),SystemContext.getPageSize());
}
public PagerModel searchHql(String hql,Object datas){
return searchHql(hql,new Object[]{datas},SystemContext.getOffset(),SystemContext.getPageSize());
}
public PagerModel searchHql(String hql,Object[] datas){
return searchHql(hql,datas,SystemContext.getOffset(),SystemContext.getPageSize());
}
public PagerModel searchHql(String hql,int offset,int pageSize){
return searchHql(hql,null,offset,pageSize);
}
public PagerModel searchHql(String hql,Object datas,int offset,int pageSize){
return searchHql(hql,new Object[]{datas},offset,pageSize);
}
public PagerModel searchHql(String hql,Object[] datas,int offset,int pageSize){
String countHql = getQuery(hql);
Query query = getSession().createQuery(countHql);
if(datas !=null && datas.length > 0){
for(int i = 0 ; i<datas.length;i++)
query.setParameter(i, datas[i]);
}
int total = ((Long)query.uniqueResult()).intValue();
Query query1=getSession().createQuery(hql);
if(datas !=null && datas.length > 0){
for(int i = 0 ; i<datas.length;i++)
query1.setParameter(i, datas[i]);
}
List list =query1.setFirstResult(offset) .setMaxResults(pageSize).list();
PagerModel pm = new PagerModel();
pm.setDatas(list);
pm.setTotal(total);
return pm;
}
public String getQuery(String hql){
int index =hql.indexOf("from");
if(index != -1){
return "select count(*)"+hql.substring(index);
}
throw new SystemException("查询语句出错!");
}
}5.定义offset、pagesize类:
public class SystemContext {
private static ThreadLocal offset = new ThreadLocal();
private static ThreadLocal pageSize = new ThreadLocal();
public static int getOffset(){
Integer os = (Integer)offset.get();
if(os == null){
return 0;
}
return os;
}
public static void setOffset(int offsetvalue){
offset.set(offsetvalue);
}
public static void removeOffset(){
offset.remove();
}
public static int getPageSize(){
Integer ps = (Integer)pageSize.get();
if(ps == null){
return Integer.MAX_VALUE;
}
return ps;
}
public static void setPageSize(int pageSizevalue){
pageSize.set(pageSizevalue);
}
public static void removePageSize(){
pageSize.remove();
}
}
6.过滤器中初始化pagesize、offset:
public class PagerFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest =(HttpServletRequest)request;
SystemContext.setOffset(getOffset(httpRequest));
SystemContext.setPageSize(getPageSize(httpRequest));
try{
chain.doFilter(request, response);
}finally{
//清空ThreadLocal中的值
SystemContext.removeOffset();
SystemContext.removePageSize();
}
}
public void init(FilterConfig arg0) throws ServletException {
}
public int getOffset(HttpServletRequest request){
int offset = 0;
try {
offset = Integer.parseInt(request.getParameter("pager.offset"));
} catch (NumberFormatException ignore) {
}
return offset;
}
public int getPageSize(HttpServletRequest request){
return 3;
}
}
7.配置过滤器web.xml中:
<filter>
<filter-name>pager-taglib</filter-name>
<filter-class>com.oa.util.filter.PagerFilter</filter-class>
</filter><filter-mapping>
<filter-name>pager-taglib</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
8.显示效果:
<pg:pager url="org.do" items="${pm.total }" export="currentPageNumber=pageNumber">
<pg:param name="parentId"/>
<pg:first>
<a href="${pageUrl}">首页</a>
</pg:first>
<pg:prev>
<a href="${pageUrl }">前页</a>
</pg:prev>
<pg:pages>
<c:choose>
<c:when test="${currentPageNumber eq pageNumber }">
<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>
http://howsun.blog.sohu.com/90707791.html
<%@ tag language="java" import="java.util.*"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ attribute name = "pagedata" type = "com.ssh2.helper.PageData" required = "true"%>
<%@ attribute name = "paramname" type = "java.lang.String"%>
<%@ attribute name = "url" type = "java.lang.String" required = "true"%>
<%
if(paramname == null || paramname.equals(""))
paramname = "topage";
if(url.lastIndexOf("?") > 0){
url = url + "&" + paramname + "=";
}else{
url = url + "?" + paramname + "=";
}
request.setAttribute("empurl",url);
%>
<style>
<!--
a{text-decoration: none;color: gray;}
a:hover{text-decoration: underline;color: red;}
-->
</style>
<div><font style="font-size: 12">
记录:${pagedata.dataFrom}-${pagedata.dataEnd}/${pagedata.total}
页码:${pagedata.currentPage}/${pagedata.totalPage}
<a href="${empurl}1">首页</a>
<s:if test="#attr.pagedata.currentPage > 1">
<a href="${empurl}${pagedata.currentPage - 1}">上一页</a>
</s:if>
<s:if test="#attr.pagedata.currentPage < #attr.pagedata.totalPage">
<a href="${empurl}${pagedata.currentPage + 1}">下一页</a>
</s:if>
<a href="${empurl}${pagedata.totalPage}">尾页</a></font>
</div>
参考这个 很详细
http://zhen144000.blog.163.com/blog/static/88690368200871745754206/各类分页显示
http://blog.csdn.net/yumengjx/relatedarticles/522358.aspx
我可以不用Hibernate吗?
[email protected]
谢谢
当然,自己也要学着掌握基本分页原理
1:自己写分页,把分页写成一个类,想实现多数据库,把得到分页语句写成一个方法,比如:getOraclePageSql(),getMySQLPageSql()等等
2:用控件:比如extjs的分页,也是比较容易的
如果想实现,需要自己修改里面的代码我个人用的是第一种
http://download.csdn.net/source/1823849