`

web中分页技术

阅读更多

import java.util.List;  
public class Page {  
 private boolean hasPrevPage;//是否存在上一页  
 private boolean hasNextPage;//是否存在下一页  
   
 private int pageSize;//每页容量  
 private int totalPage;//总页数  
 private int totalRow;//总记录数  
 private int curPage;//当前页  
 private int beginIndex;//当前页开始索引号  
   
 private String url;//该页URL地址  
 private String param;//参数以&分隔  
 private String pageToolBar;//分页工具条  
    
 private List result;//当前页结果集(记录集)  
   
 /** 
  * 功能:初始化数据(查询前) 
  * @param pageSize 
  * @param url 
  * @param param 
  */ 
 public Page(int pageSize,String url,String param) {  
  this.pageSize=pageSize;  
  this.url=(null==url)?"":url;  
  this.param=(null==param)?"":param;  
 }  
 /** 
  * 功能:初始化数据(查询后) 
  * @param hasPrevPage 
  * @param hasNextPage 
  * @param pageSize 
  * @param totalPage 
  * @param totalRow 
  * @param curPage 
  * @param beginIndex 
  * @param pageToolBar 
  */ 
 public Page(boolean hasPrevPage, boolean hasNextPage,int pageSize, int totalPage, int totalRow,int curPage, int beginIndex,String pageToolBar){  
  this.hasPrevPage=hasPrevPage;  
  this.hasNextPage=hasNextPage;  
  this.pageSize=pageSize;  
  this.totalPage=totalPage;  
  this.totalRow=totalRow;  
  this.curPage=curPage;  
  this.beginIndex=beginIndex;  
  this.pageToolBar=pageToolBar;  
 }  
   
 public List getResult() {  
  return result;  
 }  
 public void setResult(List result) {  
  this.result = result;  
 }  
 public int getBeginIndex() {  
  return beginIndex;  
 }  
 public void setBeginIndex(int beginIndex) {  
  this.beginIndex = beginIndex;  
 }  
 public int getCurPage() {  
  return curPage;  
 }  
 public void setCurPage(int curPage) {  
  this.curPage = curPage;  
 }  
 public boolean isHasNextPage() {  
  return hasNextPage;  
 }  
 public void setHasNextPage(boolean hasNextPage) {  
  this.hasNextPage = hasNextPage;  
 }  
 public boolean isHasPrevPage() {  
  return hasPrevPage;  
 }  
 public void setHasPrevPage(boolean hasPrevPage) {  
  this.hasPrevPage = hasPrevPage;  
 }  
 public int getTotalPage() {  
  return totalPage;  
 }  
 public void setTotalPage(int totalPage) {  
  this.totalPage = totalPage;  
 }  
 public int getTotalRow() {  
  return totalRow;  
 }  
 public void setTotalRow(int totalRow) {  
  this.totalRow = totalRow;  
 }  
 public int getPageSize() {  
  return pageSize;  
 }  
 public void setPageSize(int pageSize) {  
  this.pageSize = pageSize;  
 }  
 public String getPageToolBar() {  
  return pageToolBar;  
 }  
 public void setPageToolBar(String pageToolBar) {  
  this.pageToolBar = pageToolBar;  
 }  
   
 public String getParam() {  
  return param;  
 }  
 public void setParam(String param) {  
  this.param = param;  
 }  
   
 public String getUrl() {  
  return url;  
 }  
 public void setUrl(String url) {  
  this.url = url;  
 }  

建PageUtil类,用来构告Page类的数据
public class PageUtil {  
 private final static int DEF_PAGE_SIZE = 10;//默认当前页的容量  
 /** 
  * 功能:传入查询前初始化的page实例,创建一个新的Page实例 
  * @param page 
  * @param totalRow 
  * @return 
  */ 
 public static Page createPage(Page page, int totalRow) {  
  return createPage(page.getUrl(),page.getParam(),page.getPageSize(), page.getCurPage(), totalRow);  
 }  
 public static Page createPage(String url,String param,int pageSize, int curPage, int totalRow) {  
  pageSize = getpageSize(pageSize);  
  curPage = getcurPage(curPage);  
  int beginIndex = getBeginIndex(pageSize, curPage);  
  int totalPage = getTotalPage(pageSize, totalRow);  
  boolean hasNextPage = hasNextPage(curPage, totalPage);  
  boolean hasPrePage = hasPrePage(curPage);  
  String pageToolBar=getPageToolBar(url,param,hasPrePage, hasNextPage, pageSize, totalPage, totalRow,curPage);  
  return new Page(hasPrePage, hasNextPage, pageSize, totalPage, totalRow,  
    curPage, beginIndex,pageToolBar);  
 }  
 private static String getPageToolBar(String url,String param,boolean hasPrePage, boolean hasNextPage, int pageSize, int totalPage, int totalRow,int curPage){  
  StringBuffer strBuf=new StringBuffer();  
    
  boolean isHaveParam=false;  
    
  if(null!=param && !"".equals(param)){  
   isHaveParam = true;  
  }  
   
  strBuf.append("当前第"+curPage+"页/共"+totalPage+"页  总记录"+totalRow+"条");  
  if(hasPrePage){  
   strBuf.append("  <a href=\""+url+"?page=1"+((isHaveParam)?"&"+param:"")+"\">首页</a>");  
   strBuf.append("  <a href=\""+url+"?page="+(curPage - 1)+((isHaveParam)?"&"+param:"")+"\">上一页</a>");  
  }else{  
   strBuf.append("  首页  上一页");  
  }  
  if(hasNextPage){  
   strBuf.append("  <a href=\""+url+"?page="+(curPage + 1)+((isHaveParam)?"&"+param:"")+"\">下一页</a>");  
   strBuf.append("  <a href=\""+url+"?page="+totalPage+((isHaveParam)?"&"+param:"")+"\">尾页</a>");  
  }else{  
   strBuf.append("  下一页  尾页");  
  }  
  return strBuf.toString();  
 }  
   
 private static int getpageSize(int pageSize) {  
  return pageSize == 0 ? DEF_PAGE_SIZE : pageSize;  
 }  
 private static int getcurPage(int curPage) {  
  return curPage == 0 ? 1 : curPage;  
 }  
 private static int getBeginIndex(int pageSize, int curPage) {  
  return (curPage - 1) * pageSize;  
 }  
 private static int getTotalPage(int pageSize, int totalRow) {  
  int totalPage = 0;  
  if (totalRow % pageSize == 0)  
   totalPage = totalRow / pageSize;  
  else 
   totalPage = totalRow / pageSize + 1;  
  return totalPage;  
 }  
 private static boolean hasPrePage(int curPage) {  
  return curPage == 1 ? false : true;  
 }  
 private static boolean hasNextPage(int curPage, int totalPage) {  
  return curPage == totalPage || totalPage == 0 ? false : true;  
 }  

以上二个类与业务层无关,接下来结合业务层应用,给出以下代码
用户操作业务的接口:
import com.note.comm.Page;  
import com.note.dao.UsersDAO;  
import com.note.model.Users;  
public interface IUserService {  
 public UsersDAO getUsersDao();  
 public void setUsersDao(UsersDAO usersDao);  
   
 ......  
   
 /** 
  * 功能:得到当前页的分页信息与当前页的记录集(存入在page的result属性中) 
  * @param page 
  * @return 
  */ 
 public Page listUsers(Page page);  
   
 ......  

用户操作业务的具体实现:
UserService
import java.util.List;  
import com.note.bussies.service.IUserService;  
import com.note.comm.Page;  
import com.note.comm.PageUtil;  
import com.note.dao.UsersDAO;  
import com.note.model.Users;  
public class UserService implements IUserService {  
 private UsersDAO usersDao;  
 public UsersDAO getUsersDao() {  
  return usersDao;  
 }  
 public void setUsersDao(UsersDAO usersDao) {  
  this.usersDao = usersDao;  
 }  
 ......  
   
 public Page listUsers(Page page){  
  int totalRecords = this.usersDao.getUserCount();  
         page = PageUtil.createPage(page, totalRecords);  
         if(totalRecords == 0)return page;  
         List users = this.usersDao.getUsersByPage(page);  
         page.setResult(users);  
  return page;  
 }  

UserService调用UserDao的方法实现分页,UserDao代码如下:
import java.util.List;  
import org.apache.commons.logging.Log;  
import org.apache.commons.logging.LogFactory;  
import org.hibernate.Query;  
import org.hibernate.Session;  
import org.springframework.orm.hibernate3.HibernateCallback;  
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
import com.note.comm.Page;  
import com.note.model.Users;  
/** 
 * Data access object (DAO) for domain model class Users. 
 * @see com.note.dao.Users 
 * @author MyEclipse - Hibernate Tools 
 */ 
public class UsersDAO extends HibernateDaoSupport {  
    private static final Log log = LogFactory.getLog(UsersDAO.class);  
 //property constants  
 public static final String USERNAME = "username";  
 public static final String PASSWORD = "password";  
 public static final String LEVEL = "level";  
 protected void initDao() {  
  //do nothing  
 }  
       
 ......  
      
 public int getUserCount(){  
         int count = 0;  
         String querySentence = "SELECT count(*) FROM Users";  
         Session s=getSession();  
         Query query = s.createQuery(querySentence);  
         count = ((Integer)query.iterate().next()).intValue();  
         releaseSession(s);//注意,些处必须关闭Session  
         return count;  
   }  
   
 public List getUsersByPage(final Page page){  
  return getHibernateTemplate().executeFind(new HibernateCallback() {  
   public Object doInHibernate(Session s){  
    Query query=s.createQuery("From Users AS users ORDER BY users.userid");  
    query.setFirstResult(page.getBeginIndex());  
    query.setMaxResults(page.getPageSize());  
    return query.list();  
   }  
  });  
 }  

至此,一个完整的分页程序完成。下页给出Struts调用示例

action类:
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import org.apache.struts.action.ActionForm;  
import org.apache.struts.action.ActionForward;  
import org.apache.struts.action.ActionMapping;  
import org.apache.struts.action.DynaActionForm;  
import org.apache.struts.actions.DispatchAction;  
import com.note.bussies.service.IUserService;  
import com.note.comm.Page;  
import com.note.comm.ParamUtil;  
import com.note.model.Users;  
import com.note.sys.Constant;  
   
/**  
 * MyEclipse Struts 
 * Creation date: 10-09-2006 
 *  
 * XDoclet definition: 
 * @struts.action path="/user" name="userForm" input="/form/user.jsp" scope="request" 
 * @struts.action-forward name="success" path="/success.htm" redirect="false" 
 * @struts.action-forward name="fail" path="/fail.htm" redirect="false" 
 */ 
public class UserAction extends DispatchAction {  
 private IUserService ius;  
   
 public IUserService getIus() {  
  return ius;  
 }  
 public void setIus(IUserService ius) {  
  this.ius = ius;  
 }  
   
 public ActionForward display(ActionMapping mapping, ActionForm form,  
   HttpServletRequest request, HttpServletResponse response) {  
    
  //获得url  
  String contextPath = request.getContextPath();  
  String PathName="listUser" + Constant.FILEPREFIX;  
  String url=contextPath+"/"+PathName;  
  //获得参数  
  int curPage = ParamUtil.getInt(request, "page", 1);  
  String method=ParamUtil.getString(request, "method", "display");  
  String param="method="+method;  
   
  Page page=new Page(3,url,param);  
  page.setCurPage(curPage);  
  page=this.ius.listUsers(page);  
  request.setAttribute("users",page);//保存到request中  
  return mapping.findForward("success");  
 }  

view页面:
<logic:present name="users">  
 <table>  
  <logic:iterate id="user" name="users" indexId="number" property="result">  
   <tr>  
    <td>  
     <bean:write name="number" />  
     <bean:write name="user" property="userid" />  
     <bean:write name="user" property="username" />  
    </td>  
   </tr>  
  </logic:iterate>  
 </table>  
 <bean:write name="users" property="pageToolBar" filter="false" />  
</logic:present> 

分享到:
评论

相关推荐

    web中分页特效

    还不错的分页技术,,js 有兴趣的可以下载看一下,,

    基于Java的Jsp中分页

    总的来说,基于Java的Jsp分页技术结合Struts框架和JSTL标签库,使得在Web应用中实现高效且易于维护的分页功能成为可能。通过以上步骤,开发者可以构建出一套完整的分页系统,为用户提供流畅的数据浏览体验。

    jsp中分页显示的bean

    在Java Web开发中,JSP(JavaServer Pages)和Servlet是两种常见的技术,它们用于创建动态网页和处理用户请求。本知识点将详细讲解如何在JSP中利用Bean实现分页显示,以及与数据库的交互。 首先,理解Bean的概念。...

    ssh实现分页功能,一个简单的小项目

    SSH(Struts、Spring、Hibernate)是一个经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。在这个小项目中,我们将重点讨论如何利用SSH来实现分页功能,这是一个常见的需求,特别是在处理大量数据时...

    Web程序设计课程中分阶段专题模式教学的改革与实践.pdf

    2. **技术更新快速**:Web技术迭代迅速,如Web2.0和Web3.0的发展,引入了AJAX、框架(如React、Vue.js、Angular)、响应式设计等新技术,要求学生不仅要掌握基础知识,还要不断学习最新的开发工具和技术。...

    javaWEB中分页

    总结来说,Java Web中的分页技术有多种实现方式,选择哪种取决于具体需求和数据库支持。基于SQL的分页最简单,但效率较低;数据库API的分页效率更高,但可能需要熟悉特定数据库的语法;而使用第三方库则能提供更多的...

    JavaWeb分页技术与实现(含代码)

    本文将详细介绍JavaWeb中的分页技术,并对比Web服务器端分页和数据库服务器端分页的不同实现方式。 #### 二、实现分页技术 ##### 2.1 典型的三层架构 在典型的三层架构中,包括表现层、业务逻辑层和数据访问层。...

    myeclipse 分页显示数据库记录,按标题排序实例

    在Web应用中,通常会通过设置每页显示的记录数量(如10条或20条)来实现。这样用户可以逐页浏览,而不是一次性加载所有记录,降低了服务器压力。 在MyEclipse中,我们可以使用JDBC(Java Database Connectivity)来...

    Java分页大全下载zip版

    Java分页技术是Web开发中的一个关键组成部分,尤其是在处理大数据量时,为了提高用户体验和系统性能,分页显得尤为重要。本资源"Java分页大全"集合了多种分页实现方式和最佳实践,对于Java Web开发者来说是一份宝贵...

    点聚weboffice7

    WEBOFFIC是北京点聚信息技术有限公司开发的一款文档编辑组件,其主要用户打开各种格式的文档。 目前支持的主流文件格式有:Word、Excel、WPS等编辑文档。 WEBOFFICE是标准的ACTIVEX组件,支持在应用开发平台中嵌入...

    分页功能实现

    在IT领域,特别是Web开发中,分页功能是提高用户体验、优化数据展示的关键技术之一。本文将基于给定文件中的代码片段,深入探讨如何利用`PagedDataSource`类实现分页效果,以及这一过程中的核心知识点。 ### 一、...

    java中的分页

    Java中的分页技术是Web开发中处理大数据量的关键方法,主要目的是提高用户体验和系统性能。在数据量较大的情况下,一次性加载所有数据不仅会消耗大量内存,也会使用户等待时间变长。因此,分页技术应运而生,它允许...

    ajax做的分页程序

    Ajax(Asynchronous JavaScript and XML)技术是现代Web开发中的关键组成部分,它允许在不刷新整个页面的情况下与服务器进行交互,提高了用户体验。本篇将深入探讨如何利用Ajax实现一个分页程序,这对于理解Web前端...

    mysql数据库实现分页

    这在Web应用中尤其常见,如搜索引擎、电商网站等,用户通常会通过点击“下一页”或“上一页”来浏览更多内容。 二、SQL语句实现分页 在MySQL中,最常用的分页查询方式是使用`LIMIT`和`OFFSET`关键字。`LIMIT`用于...

    分页技术.pdf

    通过上述分析,我们可以看到Java Web应用中分页技术的实现涉及了前端页面设计、后端业务逻辑处理、数据库查询优化等多个方面。开发者需要综合考虑这些因素,结合所使用的数据库和编程语言,构建出高效且用户友好的...

    计算机网络课程设计——《基于JAVA的多线程Web服务器》

    1. **教材课后要求**:在实验室中分两个阶段开发一个Web服务器。最终,将构建一个多线程Web服务器,能够并行处理多个同时的服务请求。应该能够证明Web服务器有能力将主页传递给Web浏览器。 2. **目的**:实现...

    web程序攻击方式以及解决方法

    ### Web程序攻击方式及其解决方法 #### 一、跨站脚本攻击(XSS) **攻击原理:** 跨站脚本攻击(Cross Site Scripting,简称XSS)是一种常见的Web安全漏洞,它允许攻击者在受害者的浏览器中执行恶意脚本。这通常...

    java分页技术

    本文将深入探讨Java中分页技术的实现及其不同模式。 首先,Java分页的基本原理是根据用户请求的页码和每页显示的数据数量,从数据库中查询对应的数据范围,然后返回给前端展示。在Java Web开发中,通常涉及后端...

    jbpm与OA项目(六).pdf

    综合来看,jbpm与OA项目的结合主要运用了jbpm框架在业务流程管理方面的优势,并且通过Java Web技术实现了OA系统中分页显示的功能。在编程实践中,涉及到多个层面的技术点,包括Web请求处理、分页逻辑实现、对象关系...

    JSP页面布局

    在“上中(中分为左右)下”的布局模式中,我们可以将页面划分为三个主要部分:顶部(header)、中部(main,进一步细分为左右两侧)和底部(footer)。 1. **顶部(Header)**:通常包含网站的品牌标识、导航菜单...

Global site tag (gtag.js) - Google Analytics