Webwork+hibernate+spring分页实现

Spring+WebWork+Hibernate集成实现登录功能示例 本文还有配套的精品资源,点击获取 简介:本示例展示了如何将Spring、WebWork(Struts2)和Hibernate框架结合在一起,以实现一个完整的用户登录功能。它详细解释了Spring的核心依赖注入、WebWork/Struts2在MVC模式下的请求处理以及Hibernate的ORM数据操作。包括了登录流程、安全考虑、配置文件和源代码结构等方面的关键知识点,旨在帮... 阅读详情

Webwork+hibernate+spring分页实现

Webwork+Spring+Hibernate中的分页方法

      在实际的开发中,学习了其他人的分页方案,经过修改形成了一个可以直接使用的分页方案,现说明如下。 该分页可以实现定制每页显示的记录数、上下翻页和跳到一个指定的页面的功能。

一、定义了一个Page类和PageHelper类。

Page.java

public class Page {

 //-----------------数据库相关参数-----------------

 //默认每页显示记录数?

 private int perPage = 10;

 //页码

 private int page = 1;

 //记录总数

 private int total = 0;

 //开始记录数(新的游标起始位置)

 private int startRs=0;

 //翻页的url(路径),不带参数,参数由其它属性指定

 private String url = "";

 //------------------页面相关参数------------------

 //首页

 private String firstPage = "";

 //上一页

 private String prePage = "";

 //下一页

 private String nextPage = "";

 //最后一页

 private String lastPage = "";

 //每页显示记录数

 private String numPage = "";

 //跳转到第几页

 private String jumpPage = "";

 //总页数

 private int totalPage = 1;

 //

 private String hql = "";

 

 public Page() {

 }

//省略getXXX()和setXXX()

PageHelper.java

public class PageHelper {

    private boolean isHaveParam = false;//是否有参数?

    

 public PageHelper() {

     //

 }

 /**

  * 用于计算用户自定义每页显示记录数

  *

  * @return

  */

 public int doCustomPerPage(int customPerPage) {

  int perPage = customPerPage;

  String cPerPage = String.valueOf(perPage);

  if (!"".equals(cPerPage)) {

      ActionContext.getContext().getSession().put(Constant.COUNT_PERPAGE,cPerPage);

  }

  String cUserPerPage =

      (String) ActionContext.getContext().getSession().get(Constant.COUNT_PERPAGE);

  if (null != cUserPerPage) {

   perPage = Integer.parseInt(cUserPerPage);

  }

  return perPage;

 }

 public Page getNextPageObject(Page pageObject) {

  int page = 1;

  int total = 0;

  int perPage = 20;

  // 取分页器参数

  

  //页码

  page = pageObject.getPage();

  //总记录数

  total = pageObject.getTotal();

  //每页显示的记录数

  perPage = pageObject.getPerPage();

  //需要分页的action名称

  String url = pageObject.getUrl();

  

  boolean display1 = false;//有首页?

  boolean display2 = false;//有上一页?

  boolean display3 = false;//有下一页?

  boolean display4 = false;//有最后一页?

  //总页数

  int totalPage = (total + perPage - 1) / perPage;

  if (page > totalPage || page < 0) {

   page = 1;

  }

  // 首页

  StringBuffer firstPageBuffer = new StringBuffer();

  if (totalPage > 1) {

      if(isHaveParam){

          firstPageBuffer.append(url + "&pageNo=1");

      }else{

          firstPageBuffer.append(url + "?pageNo=1");

      }

   display1 = true;

  }

    

  // 上一页?

  StringBuffer prePageBuffer = new StringBuffer();

  if (page > 1) {

      if(isHaveParam){

          prePageBuffer.append(url + "&pageNo=" + (page - 1));

      }else{

          prePageBuffer.append(url + "?pageNo=" + (page - 1));

      }

   display2 = true;

  }

  

  // 下一页?

  StringBuffer nextPageBuffer = new StringBuffer();

  if (page < totalPage) {

      if(isHaveParam){

          nextPageBuffer.append(url + "&pageNo=" + (page + 1));

      }else{

          nextPageBuffer.append(url + "?pageNo=" + (page + 1));

      }

   display3 = true;

  }

  

  // 最后一页?

  StringBuffer lastPageBuffer = new StringBuffer();

  if (totalPage > 1) {

   if(isHaveParam){

       lastPageBuffer.append(url + "&pageNo=" + totalPage);

      }else{

          lastPageBuffer.append(url + "?pageNo=" + totalPage);

      }   

   display4 = true;

  }

  

  // 每页显示记录数?

  StringBuffer numPageBuffer = new StringBuffer();

  numPageBuffer.append("<select name=/"perPage/" ");

  numPageBuffer.append(" onchange=/"");

  numPageBuffer.append(" if(this.options[this.selectedIndex]");

  numPageBuffer.append(".value!=''){");

  if(isHaveParam){

      numPageBuffer.append(" location='" + url + "&");

     }else{

         numPageBuffer.append(" location='" + url + "?");

     }

  numPageBuffer.append("pageNo=1");

  numPageBuffer.append("&perPageCount='+this.options[this.selectedIndex]");

  numPageBuffer.append(".value;}/">");

  for (int i = 1; i <= 4; i++) {

   numPageBuffer.append("<option value=/"" + (i * 10) + "/"");

   if ((i * 10) == perPage) {

    numPageBuffer.append(" selected>" + (i * 10) + "</option>");

   } else {

    numPageBuffer.append(">" + (i * 10) + "</option>");

   }

  }

  numPageBuffer.append("</select>");

  pageObject.setNumPage(numPageBuffer.toString());

  // 跳转到第几页

  StringBuffer jumpPageBuffer = new StringBuffer();

  jumpPageBuffer.append("<select name=/"pages/"");

  jumpPageBuffer.append(" onchange=/"");

  jumpPageBuffer.append(" if(this.options[this.selectedIndex]");

  if(isHaveParam){

      jumpPageBuffer.append(".value!=''){location='" + url + "&");

     }else{

         jumpPageBuffer.append(".value!=''){location='" + url + "?");

     }

  jumpPageBuffer.append("pageNo='+this.options[this.selectedIndex]");

  jumpPageBuffer.append(".value;}/">");

  for (int i = 1; i <= totalPage; i++) {

   jumpPageBuffer.append("<option value=/"" + i + "/"");

   if (i == page) {

    jumpPageBuffer.append("selected");

   }

   jumpPageBuffer.append(">" + i + "</option>");

  }

  jumpPageBuffer.append("</select>");

  pageObject.setJumpPage(jumpPageBuffer.toString());

  

  pageObject.setTotal(total);

  pageObject.setPage(page);

  pageObject.setTotalPage(totalPage);

  if (display1) {     

      pageObject.setFirstPage("<A HREF=/""+firstPageBuffer.toString()+"/">首 页</A>");

  }else{

      pageObject.setFirstPage("首 页");

  }

  if (display2) {

      pageObject.setPrePage("<A HREF=/""+prePageBuffer.toString()+"/">上一页</A>");

  }else{

      pageObject.setPrePage("上一页");

  }

  if (display3) {

      pageObject.setNextPage("<A HREF=/""+nextPageBuffer.toString()+"/">下一页</A>");

  }else{

      pageObject.setNextPage("下一页");

  }

  if (display4) {

      pageObject.setLastPage("<A HREF=/""+lastPageBuffer.toString()+"/">尾 页</A>");

  }else{

      pageObject.setLastPage("尾 页");

  }

  

  pageObject.setNumPage(numPageBuffer.toString());

  pageObject.setJumpPage(jumpPageBuffer.toString());

  

  return pageObject;

 }

    /**

     * @return Returns the isHaveParam.

     */

    public boolean isHaveParam() {

        return isHaveParam;

    }

    /**

     * @param isHaveParam The isHaveParam to set.

     */

    public void setHaveParam(boolean isHaveParam) {

        this.isHaveParam = isHaveParam;

    }

}

      Page类主要是存储分页时每页的相关信息,PageHelper类主要是根据用户通过URL送来的参数设置Page对象的相关属性,然后再用这些属性设置页面中的分页。

二、页面中的代码

<!--

<table width="20%" align="center"><tr><td height="5"></td></tr></table>

<table width="75%" align=center cellpadding="0" cellspacing="0" bgcolor="#F4F4F4" style="border: 1 solid #CCCCCC">

<thead>

<tr>

<td height="30">&nbsp;&nbsp;共 <font color=blue><ww:property value="page.total"/></font> 条记录&nbsp;

<ww:property value="page.firstPage"/>&nbsp;

<ww:property value="page.prePage"/>&nbsp;

<ww:property value="page.nextPage"/>&nbsp;

<ww:property value="page.lastPage"/>&nbsp;&nbsp;&nbsp;

页次:<ww:property value="page.page"/>/<ww:property value="page.totalPage"/>&nbsp;&nbsp;

每页显示 <ww:property value="page.numPage"/> 条&nbsp;&nbsp;

跳转到第&nbsp;<ww:property value="page.jumpPage"/>&nbsp;页</td>

</tr>

</thead>

</table>

-->

主要是把page对象的属性通过Webwork中定义的标签显示在页面中。

三、Action中的调用代码

public String execute() throws Exception{

       

        if (logger.isDebugEnabled()) {

            logger.debug("teamId="+teamId+"--载入日志成功!");

        }

       

              user = (User)ActionContext.getContext().getSession().get(Constant.LOGIN_USER_KEY);

             

        //如果是用户,设定组织编号。如果是领导,则通过参数给组织编号赋值。

        if( (null == teamId) || ("".equals(teamId))){

            this.setTeamId(user.getOrgan().getId());

      

 

}       

       

        int perPage = 10;

        String totalHql =

            "select count(*) from Log as log where log.user.organ.id='"+teamId+"'";

              PageHelper pageHelper = new PageHelper();

              if(perPageCount != -1){

                  perPage = pageHelper.doCustomPerPage(perPageCount);

              }

          

              Page pageObj = new Page();

              pageObj.setPerPage(perPage);

              pageObj.setPage(pageNo);

              pageObj.setHql(" from Log log order by log.id desc where log.user.organ.id='"+teamId+"'");

              pageObj.setTotal(this.logDao.getTotal(totalHql));

        if(user.isLeader()){   

               this.setTeams(logDao.listTeams());

               pageHelper.setHaveParam(true);

               pageObj.setUrl("listlogs"+Constant.FILE_SUFFIX+"?teamId="+teamId);

        }else{

            pageObj.setUrl("listlogs"+Constant.FILE_SUFFIX);

        }

              pageObj.setStartRs((pageNo-1) * perPage);

 

              page = pageHelper.getNextPageObject(pageObj);

             

        //列出组织

        this.setLogs(this.logDao.getList(page));

 

        //根据组织ID获得名称

        this.setTeamName(logDao.getNameById(teamId));

 

        if (logger.isDebugEnabled()) {

            logger.debug("载入session用户成功!");

        }       

        return SUCCESS;

    }

 

 

源文档 <http://cache.baidu.com/c?word=webwork%2C%B7%D6%D2%B3&url=http%3A//blog%2Ecsdn%2Enet/cnliuxj/archive/2006/01/06/571755%2Easpx&b=9&a=18&user=baidu>

 

 
网络书城开发:WebWork+Spring+Hibernate整合实践 本文还有配套的精品资源,点击获取 简介:通过整合WebWork、Spring和Hibernate三大Java框架,开发者可以构建出高效、可扩展的网络书城应用。WebWork负责动作驱动和表单处理,Spring提供依赖注入和面向切面编程,而Hibernate则作为对象关系映射工具,实现数据持久化。该项目涵盖Controller、Service、DAO、Model层以及视图展示... 阅读详情

相关推荐

webwork 分页

分页 webwork servlet 分页技术 jsp 框架结合的分页

Hibernate+Webwork2分页初体验

BaseHibernateDao.java 为Hibernate DAO基本类package com.wzj.framework.dao.hibernate;       ......................................./** * @desc DAO基本类,其他Business Dao从该类继承 * @author chikai * @link chikaimai

chikai On The Java Road 2767

核磁干货 | RESTplus实战:静息态fMRI预处理全流程解析

本文详细解析了使用RESTplus工具包进行静息态fMRI数据预处理的完整流程,包括数据准备、环境配置、预处理步骤及高级分析技巧。RESTplus作为基于SPM的批处理工具,以其图形化界面和智能化参数设置显著提升了核磁静息态数据分析的效率,特别适合新手和临床研究人员。文章还分享了实战中的常见问题解决方案和性能优化技巧。

wine的专栏 880

webwork+spring+hibernate整合

1、webwork、spring的集成  (1)、开启spring的集成:         首先将最新的spring的jar加到classpath中,然后在src目录下建立webwork.properties文件,文件只包含下面的内容        webwork.objectFactory=spring         这种情况下,所有的对象都至少会试图使用Spring来创建.如果它们不能被Sp

lemhion的专栏 697

Flink CDC 1.18.1 Oracle 数据同步到postgresql

8、修改Flink的配置文件,主要是各种服务的绑定地址,默认为localhost,统统改为0.0.0.0,如:rest.address: 0.0.0.0 #localhost。将flink-sql-connector-oracle-cdc-3.0.1.jar复制到flink-1.18.1/lib目录中。6、下载 flink-connector-jdbc-3.1.1-1.17.jar,postgresql-42.7.3.jar。7、安装postgresql就不说了,相信你已经有了数据库了。

ynzhangyao的专栏 1799

Oracle 11g RAC 节点通信故障排查与修复指南

本文详细介绍了Oracle 11g RAC集群发生节点通信故障时的系统性排查与修复方法。当出现节点异常重启时,核心问题往往源于心跳网络中断。文章提供了从快速诊断、日志分析到六层深度检查的完整指南,并给出了针对网络配置、内核参数及Oracle已知Bug等常见根因的实战解决方案,帮助DBA快速恢复集群稳定。

weixin_29246195的博客 270

如何实现webwork+spring+hibernate框架的结合应用

    现在WebWork+Spring+Hibernate这种框架已经越来越得到人们地推荐使用,至于这种框架的优越性以及为什么选择这种框架的结合不在本文范畴;另外对于一些项目中基本的构建将不在本文中详细叙述;下面就开始正题,如何建立这种框架应用: 第一步:当然是首先要构建一个Java web project项目,建立好项目以后创建包的命名。在本例中建立了项目目录与包结构如下图:第二步:导

无情的你,无情的雨! 2678

VirtualBox增强功能安装全指南:从下载到配置复制粘贴功能

本文详细介绍了VirtualBox增强功能的完整安装与配置流程,重点解决了虚拟机与主机间复制粘贴、文件拖放等核心协作难题。通过分步指南和故障排查,帮助用户在不同操作系统(如Windows、Linux)中实现无缝集成,提升虚拟化工作效率与体验。

weixin_29206669的博客 418

webwork+hibernate+spring進行分頁

[code="java"]package bu3.tools; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import ...

8510580 166

STM32驱动HC-SR04超声波模块

本篇文章将带大家使用HAL库驱动HC-SR04超声波模块。超声波模块作为智能小车必备的模块,要学习智能小车的同学是必须掌握好这个模块的使用的。HC-SR04是一种常用的超声波传感器模块,也被称为超声波测距模块,广泛应用于各种自动化控制和测距系统中。它通常由超声波发射器、接收器、控制电路和外壳组成,可以实现非接触式的距离测量。下面是HC-SR04超声波模块的一些特性和技术参数:距离测量范围:2cm ~ 400cm(可调)。测量精度:0.3cm。工作电压:DC 5V。工作电流:15mA。

m0_49476241的博客 7682

华为OD 面试手撕代码真题【岛屿的周长】

0代表水,1代表陆地,岛由陆地组成且岛内不允许有湖,让你求岛的周长。

MISAYAONE的博客 8414

Java 分页 封装类

[code="java"] 用到的分页 hibernate + spring + webwork2 package com.linkage.util.page; /** * @{#} PageUtilsTabOne.java Create on 2009-9-30 上午09:27:09 * * Copyright (c) 2009 by linkaged....

大蘑菇 164

【优化求解】基于matlab粒子群算法PSO确定最佳开关角对称级联多层逆变器【含Matlab源码 13080期】

粒子群算法PSO确定最佳开关角对称级联多层逆变器 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 97

Webwork2结合Spring, Hibernate

Webwork2结合Spring, Hibernate从User说起,包括创建/修改/删除User,以及对User的列表,先看Webwork2的Action代码 为简单说明问题,不考虑什么Interceptor, Duplicated Submit, Validation,等问题 创建/修改/删除User:UserAction.java相关代码 java

十二棵橡树 1407

利用 AI 自动生成 BDD(行为驱动开发)格式的 Gherkin 测试用例

文章摘要 当前BDD测试领域正经历AI驱动的变革浪潮。传统Gherkin用例编写面临四大痛点:语法负担重、场景发现成本高、一致性差和维护困难。2025-2026年,AI生成Gherkin的工具生态快速成熟,主要分为五类:测试管理平台内置AI(如TestRail 10.2)、Jira插件(如AssertThat BDD)、独立AI平台(如PrimeCompass)、CLI工具和研究原型。其中,TestRail实现生成-执行闭环,AssertThat采用多阶段Agent工作流提升质量,PrimeCompass则

ZXSXJ的博客 205

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

玩玩Spring之hibernate+ webwork+ spring添删改查示例

主演:webwork  配角:struts、jsp、hibernate、spring等    借着吹spring的风,今天笔者给大家介绍一种很多人都非常欣赏的轻量极、高雅的J2EE组合,那就是hibernate+ webwork+ spring。说介绍不准确,应该还只是一个简单的演示,毕竟webwork的赞歌已经有很多人唱过了,这里就不重复(主要还是因为唱不出来,惭愧!)。我只希望能通过简单的

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 2525

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring+Hibernate+WebWork配置

配置文件:src目录下:ehcache.xmljdbc.propertieslog4j.propertieswebwork.propertieswebwork-user.xmlxwrok.xml web/WEB-INF目录下:applicationContext.xmljdbc.propertiesweb.xmlpager-taglib.

shenbin1430的专栏 1040

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

基于webwork spring hibernate 项目的开发

基于webwork spring hibernate 项目的开发这三者的结合,应该是java web编程最好的模式。首先说明三者各自负责的职务:1 hibernate 负责数据库的操作2 spring 负责真正的业务操作3 webwork 负责请求转交,并把spring的处理结果返回给用户以往的开发中,很多人注重MVC模式。的确,这种模式把程序以面向对象的思想分成 了三个部分。但在web开发中,并

4069

Webwork2+Spring+Hibernate体验

转自:http://www.blogjava.net/lgplhk/嘿嘿,偶来介绍下Webwork2结合Spring, Hibernate,Default认为对Spring,Hibernate有一定了解。 从User说起,包括创建/修改/删除User,以及对User的列表,先看Webwork2的Action代码 为简单说明问题,不考虑什么Interceptor, Duplic

::古埃及象形文字:: 5184

WebWork+Spring+Hibernate的烦恼

Java世界正处于战国时代,诸侯各自为政,可苦了我们这些老百姓。新的项目中采用了Webwor+Spring+Hibernate的构架,对于我们公司除了Spring,都是新的技术。就像所有新技术一样,带来生产力的提高的同时也带来的学习成本的提高以及种种不便。就拿Hibernate来说吧,你不是面向对象吗?为什么还要搞个HQL,干脆全部OO不就得了,Hibernate宣称HQL是对SQL的OO封装

风之力——Essential Java 1689

[项目关注]bba96 开源项目,webwork,spring,hibernate

[转]http://forum.javaeye.com/viewtopic.php?t=16210http://bba96.dev.java.net 源码下载(包含一个快速开发的例子。) https://bba96.dev.java.net/servlets/ProjectDocumentList?folderID=4149&expandFolder=4149&folderID=0 简单说

Gaston 1113

Webwork2+Spring+Hibernate集成的问题求助(No bean named 'userDAOProxy ' is defined)

我在测试夏昕写的《Spring Guide》里面的 Webwork2 in Spring部分,在IE中submit时遇到了这样一个问题: No bean named userDAOProxy is defined,百思不得其解,弄了几天都没有结果,十分焦急.盼望大侠们给指导指导,万分感激!!!com.opensymphony.xwork.config.ReferenceResolverExc

lh25717的专栏 3841

webwork、webwork+spring和webwork+spring+hibernate

webwork: jar包: commons-logging.jar freemarker.jar javassist.jar ognl.jar oscore.jar rife-continuations.jar webwork-2.2.7.jar xwork.jar web.xml中添加: webwork com.o

村长Korbin 1232

webwork+spring+hibernate的整合

1、webwork、spring的集成  (1)、开启spring的集成:         首先将最新的spring的jar加到classpath中,然后在src目录下建立webwork.properties文件,文件只包含下面的内容        webwork.objectFactory=spring 

林维杰的专栏 1090
上一篇: 一个struts的分页--sql server存储过程版
下一篇: Java中一些关于日期、日期格式、日期的解析和日期的计算
miaowei2008
博客等级 码龄21年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值