`
danielhjd
  • 浏览: 246283 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

(Spring&Hibernate )Spring & Hibernate的整合分页问题之二:代码解析和逻辑关系

    博客分类:
  • JDBC
阅读更多

总所周知,JavaEE软件开发三层构架分别是:显示层(JSP页面/html页面/aspx页面),业务逻辑层(Servlet/Action),数据访问层(DAO).三层构架之间的逻辑关系和数据流构成了软件的基本内容。此部分主要研究在Spring&Hibernate的整合分页中之间的数据流和逻辑跳转的关系;

 

业务介绍:由添加产品直接跳转到所有产品的显示页面(add.jsp---Sumbit--->add.action---redirect--->list.action--->list.jsp)...在这里,我们关注的是(list.action--->list.jsp)

 

1:显示层,在这里我们是用JSP页面做为显示并引用S-Tag。

 

2:业务逻辑层,由add.action重定向到list.action。这次逻辑跳转很明显没有数据流通过add.jsp页面传到业务层面。

 

3:数据访问层,list.action访问数据库的数据。如list.action的代码所显示:从数据中获取数据的总条数:

this.buygoodsDao.getRows()           //从数据库中获取数据的总条数

 获取一个Pager对象pager (获取这个对象的作用是什么了?接下来会给详细的解释),此出Class PagerService,这里的paperService作用是为了获取一个Pager的对象(作用访问页面的数据,在动态的通过一个对象实现页面的传递

this.pager = this.pageService.getPager(this.getCurrentPage(), this.getPagerMethod(), Integer.parseInt(this.getTotalRows()));

这里我们来看Class Pager(点击查看代码),Paper中有很多类似于javabean中的get&set方法(在这里的作用无非是实现数据流的作用),另外还有构造方法public Pager(int _totalRows) {}(在这里的作用是获取第一页得数据源),public void first() {}等方法(在这里的作用是控制currentPages的数据变化);

 

this.setCurrentPage(String.valueOf(pager.getCurrentPage()));
//this.setTotalPages(String.valueOf(pager.getTotalPages()));
this.setBuygoods(this.buygoodsDao.getPageAllBuyGoods(pager.getPageSize(),pager.getStartRow()));

 

 4:数据显示(显示层)。将从数据库中获取的数据传到JSP以实现显示的功能。

      在这里,值得注意的是" 由于这是第一次作用于list.action,并没有jsp页面到业务逻辑层面的数据的传递"。

public String list(){
		this.setTotalRows(String.valueOf(this.buygoodsDao.getRows()));
		System.out.println("A获取的TotalRows="+this.getTotalRows());
		System.out.println("A获取的CurrentPage="+this.getCurrentPage());
		System.out.println("A获取的PagerMethod="+this.getPagerMethod());
		this.pager = this.pageService.getPager(this.getCurrentPage(), this.getPagerMethod(), Integer.parseInt(this.getTotalRows()));
		System.out.println(this.getTotalRows());
		System.out.println("B获取的TotalRows="+this.getTotalRows());
		System.out.println("B获取的CurrentPage="+this.getCurrentPage());
		System.out.println("B获取的PagerMethod="+this.getPagerMethod());
		this.setCurrentPage(String.valueOf(pager.getCurrentPage()));
//		this.setTotalPages(String.valueOf(pager.getTotalPages()));
		this.setBuygoods(this.buygoodsDao.getPageAllBuyGoods(pager.getPageSize(),pager.getStartRow()));

			}
		return "success";	
	}

 输出的结果是:

    (在这里pager这个对象通过get&set的方法传到了list.jsp上)

A获取的TotalRows=33
A获取的CurrentPage=null
A获取的PagerMethod=null
B获取的TotalRows=33
B获取的CurrentPage=null
B获取的PagerMethod=null

  由上面的结果可以看的出 CurrentPage PagerMethod并不是从页面取得的,这就是为上面在PagerService中要判断这两个数据是不是空值的原因。new 一个Pager的对象;

Pager pager = new Pager(totalRows);

转到Pager上,Pager有一个含参数的构造方法,确定了第一页。

public Pager(int _totalRows) {
		totalRows = _totalRows;
		totalPages=totalRows/pageSize;
		int mod=totalRows%pageSize;
		if(mod>0){
			totalPages++;
		}
		currentPage = 1;
		startRow = 0;
	}

此时赋值了的currentPage 传到list.jsp上。

 

看看jsp中的代码,中的属性元素:totalRows;currentPage;pager;

<td colspan="7">
    		共<s:property value="totalRows"/>行&nbsp;
    		第<s:property value="currentPage"/>页&nbsp;
    		共<s:property value="pager.getTotalPages()"/>页&nbsp;
    		<a href="<s:url value="listBuyGoods.action">
    			<s:param name="currentPage" value="currentPage"/>
    			<s:param name="pagerMethod" value="'first'"/>	
    		</s:url>">首页</a>
    		
    		<a href="<s:url value="listBuyGoods.action">
    			<s:param name="currentPage" value="currentPage"/>
    			<s:param name="pagerMethod" value="'previous'"/>
    		</s:url>">上一页</a>
    		
    		<a href="<s:url value="listBuyGoods.action">
    			<s:param name="currentPage" value="currentPage"/>
    			<s:param name="pagerMethod" value="'next'"/>
    		</s:url>">下一页</a>
    		
    		<a href="<s:url value="listBuyGoods.action">
    			<s:param name="currentPage" value="currentPage"/>
    			<s:param name="pagerMethod" value="'last'"/>
    		</s:url>">尾页</a>
    	</td>

 疑问一:为什么一下三个的取值的方法不同?

共<s:property value="totalRows"/>行&nbsp;
第<s:property value="currentPage"/>页&nbsp;
共<s:property value="pager.getTotalPages()"/>页&nbsp;

 疑问二:Pager的对象pager有totalRows;currentPage这两个属性,同时也增加了set&get的方法;

 

 共<s:property value="pager.getTotalRows()"/>行&nbsp;
 第<s:property value="pager.getCurrentPage()"/>页&nbsp;
 共<s:property value="pager.getTotalPages()"/>页&nbsp;

 这样的取值方式可以吗? 操作证明,这种方法也是可以去到值的...

 

疑问三:为什么在Action中要把CurrentPage set出去?不是通过Pager这个对象可以去到....

this.setCurrentPage(String.valueOf(pager.getCurrentPage()));

 

带着三个疑问回到list.action中...我们会发现一下代码:

this.pager = this.pageService.getPager(this.getCurrentPage(), this.getPagerMethod(), Integer.parseInt(this.getTotalRows()));

 

CurrentPage PagerMethod这两个属相的值是用页面获取的到,通过pageService.getPager()方法返回一个pager的对象。再通过这个对象在页面上取值。当CurrentPage PagerMethod为空的时候,就是第一次得初始值。

 

这个情况是程序这样设计的关键....第一次初始值的需要

 

在分页中,往往是在页面上点击“首页,前一页,后一页,尾页”按键触发一个事件,这时将触发的数据传到servlet中,通过pageService获取一个对象pager,通过pager控制数据的变化,最后通过servet将数据传出去。

 

假设一:如果action中的这段程序截掉......

this.setCurrentPage(String.valueOf(pager.getCurrentPage()));

 那么“首页,前一页,后一页,尾页”将会失效...因为currentpage将取不到值

 

假设二:在假设一的基础上,将程序改成这样:

<a href="<s:url value="listBuyGoods.action">
<s:param name="currentPage" value="pager.getCurrentPage()"/>
<s:param name="pagerMethod" value="'first'"/>	
</s:url>">首页</a>

 这样程序仍然为正确。

 

这里就设计到程序的优化问题....可惜小弟还没学...哈哈

 

 

 

分享到:
评论

相关推荐

    struts spring hibernate 登陆 SSH整合分页功能

    struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页

    struts hibernate spring 分页ssh分页

    综上所述,SSH分页是Java企业级开发中的一个重要技术,它涉及到了Struts的控制层、Hibernate的数据访问层和Spring的整合及服务层,是提升应用性能和用户体验的关键手段之一。通过熟练掌握SSH分页,开发者可以更高效...

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    通过上述步骤和示例代码,我们了解了如何在Struts2和Hibernate框架下实现分页功能。这种实现方式不仅提高了应用程序的性能,还增强了用户体验。在实际项目中,可以根据具体需求进一步优化分页逻辑,例如增加缓存机制...

    Spring+Hibernate完整分页

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别专注于应用的依赖注入(DI)和对象关系映射(ORM)。结合使用,它们可以构建出高效、可维护的Java Web应用程序。本文将深入探讨如何利用Spring和...

    spring+hibernate 分页 +mysql

    这里我们讨论的是结合Spring、Hibernate和MySQL实现的分页功能,这是一个常见的技术栈组合,广泛应用于Web应用开发。 Spring是一个开源的Java框架,它提供了全面的编程和配置模型,用于构建企业级应用。Spring的IoC...

    Struts2,Spring与Hibernate整合应用,学生成绩管理系统

    通过整合Struts2、Spring与Hibernate,学生成绩管理系统不仅实现了基本的登录、学生信息和成绩管理功能,还通过分页技术增强了用户体验。更重要的是,这一整合展示了如何利用现代Java EE框架构建复杂企业级应用的...

    MyClipse6.0\Struts2,Spring与Hibernate整合应用,学生成绩管理系统

    本项目“学生成绩管理系统”就是基于Struts2、Spring和Hibernate三大主流Java Web框架进行整合的一个实例。这样的整合能够充分利用各框架的优势,实现模型-视图-控制器(MVC)架构,提供数据持久化、业务逻辑处理...

    springMVC+spring+hibernate+jquery分页完整项目,完整代码

    本项目是一个基于SpringMVC、Spring、Hibernate和jQuery的完整分页应用,涵盖了后端服务、数据持久化、前端交互等多个重要技术领域。下面将详细解释这些技术及其在项目中的应用。 1. SpringMVC:SpringMVC是Spring...

    spring+struts2+hibernate整合实现分页

    在这个项目中,“spring+struts2+hibernate整合实现分页”是一个基础教程,旨在帮助初学者理解如何在SSH框架下实现数据的分页展示。下面将详细讲解这个主题中的关键知识点。 1. **Spring框架**:Spring是Java应用的...

    JSF+Spring+Hibernate 分页显示

    2. **创建DAO层**:利用Hibernate的Session和Query接口,编写分页查询的代码,注意设置查询的起始位置和条目数量。 3. **配置Spring**:在Spring配置文件中,配置Hibernate的SessionFactory和事务管理器,确保数据...

    基于spring+hibernate的组合查询+分页组件

    本篇文章将深入探讨如何结合Spring与Hibernate实现高效、灵活的组合查询以及分页功能,这对于提升Web应用程序的性能和用户体验至关重要。 首先,Spring框架是一个全面的Java企业级应用开发框架,它提供了依赖注入...

    struts2+spring+hibernate分页显示完整代码

    本篇文章将详细讲解如何在基于Struts2、Spring和Hibernate的项目中实现分页功能。 首先,我们从DAO层开始。在`MemberDao`接口中,我们定义了两个关键的方法,一个是用于分页查询,另一个是获取所有记录的数量。这两...

    spring+hibernate+c标签分页+mysql

    在IT行业中,Spring、Hibernate和MySQL是开发Java Web应用程序时常用的三大框架和技术。Spring作为一款轻量级的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,提供了全面的企业级应用开发...

    springmvc+hibernate+spring maven案例(包含分页查询)

    Spring MVC、Hibernate 和 Spring 是Java开发中非常流行的三大框架,它们分别用于Web应用的视图控制器、对象关系映射和依赖注入。这个压缩包提供的案例是这三个框架的整合使用,涵盖了基本的CRUD(创建、读取、更新...

    struts,spring,hibernate整合增删改查以及分页功能

    struts,spring,hibernate整合增删改查以及分页功能

    Spring+SpringMVC +Hibernate 整合

    Spring、SpringMVC和Hibernate是Java开发中三大核心框架,它们的整合是企业级Web应用的常见架构选择。Spring作为基础框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;SpringMVC则负责处理HTTP请求,实现...

    Struts+Spring+Hibernate开发实例 (SSH整合)

    通过理解Struts、Spring和Hibernate的原理及其相互关系,开发者可以将它们高效地组合起来,形成一个以Spring为核心,Struts为表现层,Hibernate为数据访问层的架构。这个案例的实现有助于深入理解SSH整合的实际运用...

    spring Spring MVC Hibernate 4.x 整合案例

    在IT领域,Spring、Spring MVC和Hibernate是三个非常重要的开源框架,它们分别在不同层面上为Java应用程序提供了强大的支持。本整合案例将详细介绍如何将这三个框架整合在一起,以实现一个完整的Web应用程序,涵盖...

    Struts_Spring_Hibernate_CRUD操作案例_-分页查询

    Struts、Spring和Hibernate是Java开发中常用的三大框架,它们分别负责不同的职责:Struts作为MVC(模型-视图-控制器)框架处理请求和响应,Spring提供了依赖注入和事务管理,而Hibernate则是对象关系映射(ORM)框架...

    使用Struts + Spring + Hibernate完成分页笔记

    "使用Struts + Spring + Hibernate完成分页笔记"这个主题涵盖了三个关键的Java EE框架:Struts、Spring和Hibernate,它们分别负责表现层、业务逻辑层和数据访问层的管理。下面将详细介绍这三个框架在分页实现中的...

Global site tag (gtag.js) - Google Analytics