`

hibernate+stuts2 简单实现分页

 
阅读更多
最近学习hibernate的分页,发现它实现分页比其他方法要简单多了。
以前写了一个分页感觉很麻烦,首先在数据库调用储存过程写一个分页代码,然后在java程序中又去调用储存过程。其大部分代码如下:
public class fenye {

	   private int totla_page=0;
	   private int now_page=1;
	   
	  public List<GoodInfo> fenyetst(int nw_page,String typeid)
	  {
		  
		  Connection conn=DBConn. getConnection()
			;
		  Statement stat=null;
		  ResultSet rs=null;
		  CallableStatement cs=null;
		  List<GoodInfo> list=new ArrayList<GoodInfo>();
		  
		  try {
			cs=conn.prepareCall("{call prc_query(?,?,?,?,?,?,?,?,?)}");
			cs.setString(1, "t_bookinfor");
			cs.setString(2, "typeid="+typeid);
			cs.setString(3,"bookid");
			cs.setString(4,"asc");
			cs.setInt(5,nw_page);
			cs.setInt(6, 16);
			cs.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER);
			//cs.registerOutParameter(6, oracle.jdbc.OracleTypes.NUMBER);
			cs.registerOutParameter(7, oracle.jdbc.OracleTypes.NUMBER);
			cs.registerOutParameter(8, oracle.jdbc.OracleTypes.NUMBER);
			cs.registerOutParameter(9, oracle.jdbc.OracleTypes.CURSOR);
			
			cs.execute();
			rs=(ResultSet)cs.getObject(9);
			BigDecimal t_nowpage=(BigDecimal)cs.getObject(5);
			now_page=t_nowpage.intValue();
			BigDecimal total=(BigDecimal)cs.getObject(8);
			totla_page=total.intValue();
			while(rs.next())
			{
				
				GoodInfo god=new GoodInfo(rs.getInt(1),rs.getString(2),
		                   rs.getDouble(3),rs.getInt(4),
		                   rs.getString(5),rs.getString(6),
		                   rs.getString(7),rs.getString(8),
		                   rs.getString(9),rs.getInt(10));

               list.add(god);		
				
				
			}

用hibernate 的分页,它的底层已经封装好了分页,所以具体细节我们并不需要深究了,我们只要调用query.setFirstResult(pages);query.setMaxResults(size);这个2个方法 就可以实现分页。
分页测试如下:
首先建立一个action。在action里面实现每页查出的数据,然后封装在list中,最后在jsp显示。
action类代码:
package com.xxg.action;

import java.util.ArrayList;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.xxg.bean.Author;
import com.xxg.dao.ListBillUser;

public class Check extends ActionSupport {
	
	
	public ArrayList<Author> authors = new ArrayList<Author>();
	private int page = 0;
	private int size = 20; // 初始化时的值,会调用set方法set进去
  	
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}



	public int getSize() {
		return size;
	}

	public void setSize(int size) {
		this.size = size;
	}
	public ArrayList<Author> getAuthors() {
		return authors;
	}

	public void setAuthors(ArrayList<Author> authors) {
		this.authors = authors;
	}
	public String execute(){
		
		 ListBillUser lb = new ListBillUser();
		
		authors = lb.firstgetAuthors(page,size); 
		ActionContext.getContext().getSession().put("page", page);
		/*this.setPage(page);
		this.setSize(size);
		*/
		this.setAuthors(authors);
		
		return "list";
		
	}	

}

与数据交互的到层
package com.xxg.dao;

import java.util.ArrayList;

import org.hibernate.Query;
import org.hibernate.Session;

import com.xxg.bean.Author;
import com.xxg.util.HiberUtil;

public class ListBillUser {
	
	 public ArrayList<Author>  firstgetAuthors(int pages,int size){
		 
		 ArrayList<Author>  authors = new ArrayList<Author>();
		 
		  Session session = HiberUtil.getSession(); 
		  String hql = "from Author author";
		  Query query = session.createQuery(hql);
		  query.setFirstResult(pages);  // 设置从哪条记录开始显示,注意page=0 表示第一条记录
		  query.setMaxResults(size);   // 每页显示的记录条数
		 
		  authors =(ArrayList<Author>)query.list();
		  
		  session.close();
		 
		 return authors;
	 }
	
	

}



前台显示:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib uri="/struts-tags" prefix="s" %>


<html>
  <head>
    <base href="<%=basePath%>">

  </head>
  
  <body>
    <center>
    <table border="1" width="40%">
    <tr>
    <td>编号</td>
    <td>姓名</td>
    </tr>
        <s:iterator value ="authors" var ="au" status="st">
        <s:if test ="#st.odd" >
        <tr bgcolor ="yellow">
        </s:if>
        <s:else>
          <tr bgcolor ="cyan">
        </s:else>
        <td><s:property value="#au.id"></s:property></td>
        <td><s:property value="#au.name"></s:property></td>
        </tr>
        <s:set value="xxg" var="2"></s:set>
        
        </s:iterator>
    
    </table>
     <!--上一页 -->    
    <%int page1 =(Integer)session.getAttribute("page"); 
      if(page1==0)
      
      {  %>
    	  <a href = "check?page=<%=0 %>">上一页</a>
      <%} 
      else{
    	  
      %> 
    	 <a href = "check?page=<%=(page1-20) %>">上一页</a> 
      <% }
    %>
    
     <!-- 显示1,2,3,4,5 单页 -->
       <% 
        for(int i=0;i<5;i++){
        	%>
        <a href ="check?page=<%=i*20%>"><%=i+1%>|</a>	
        	
      <%   } %>
            
            
      <!--下一页 -->      
  <%  if(page1==80)
      
  {  %>
    	  <a href = "check?page=<%=80%>">上一页</a>
      <%} 
      else{
    	  
      %> 
    	 <a href = "check?page=<%=(page1+20) %>">下一页</a> 
      <% }
    %>
     
    <s:debug></s:debug>
  </body>
</html>



分页思路:总共一百条记录,每页显示20条。
当发出请求:localhost:8080/Hibe01/check
交给action去处理,初始action里面的page=0 表示从第一跳条记录开始显示,size=20表示每一页显示20条记录,在action里面调用dao层的分页方法,得到分装了记录的list,这个list是根据不同的page,size 值得到不同的记录。最后在jsp页面迭代出list里面的记录。当点击上一页时,会映射到<a href = "check?page=<%=(page1-20) %>">上一页</a> 动态传值给action 如此反复想像action返送请求,只不过每次的参数不同而已。

在这里遇到一个问题:
本想页面展示全部用struts标签做,结果在实现上一页,和下页功能时,发现
<s:propety value ="page"></s:property> 得到的值不知道该如何参与到计算。
比如说我的得到值为20 我如何能也这个值进行关联计算。所以为了解决这个问题,我又换了jsp标签 采用在aciton里面 将page放在session 里面,在前台用 <%int page1 =(Integer)session.getAttribute("page");> 这样得到的page值就可以在
<% %> 里面参与计算了。

通过写分页的测试,1.在sturs2的action中,属性值如果不设置get,set方法,那么在valuestack中将不会有它的值。属性值如果附上初始值 比如说private int x =10;
那么在valuestack 中会有这个初始值。(前提条件是这个属性有在action里面设置了get/set方法)
2.在jsp中,当用struts2标签 时
 
 <s:iterator value ="authors" var ="au" status="st">
        <s:if test ="#st.odd" >
        <tr bgcolor ="yellow">
        </s:if>

  <s:set value="xxg" var="2"></s:set>
 

其中var 对应的值 都被设置到了stackcontext 里面去了,想在页面访问该元素必须用
#var 去访问
分享到:
评论

相关推荐

    ssh项目spring+stuts+hibernate+sql server 中文乱码解决方案_lj管用.txt

    ssh spring+stuts+hibernate+sql server 中文乱码解决方案_lj管用.txt

    车辆管理系统(struts+hibernate+spring+oracle).rar

    车辆管理系统(struts+hibernate+spring+oracle).rar 对​公​务​用​车​进​行​档​案​、​费​用​、​调​度​、​维​修​、​安​全​、​运​行​等​全​方​位​的​管​理​和​统​计​,​以​方​便​...

    spring+stuts+hibernate论坛BBS.

    标题 "spring+stuts+hibernate论坛BBS" 提示我们这是一个基于Java技术栈的Web应用程序,使用Spring、Struts和Hibernate这三个框架构建的在线论坛。这些框架在企业级应用开发中非常常见,用于实现模型-视图-控制器...

    论坛系统(Struts 2+Hibernate+Spring实现)

    通过Struts 2、Hibernate和Spring的集成,论坛系统实现了高效的数据处理、灵活的业务逻辑和良好的架构设计,满足了复杂Web应用的需求。在实际开发中,还需要结合HTML、CSS和JavaScript等前端技术,创建交互友好的...

    毕业设计-Struts2+Hibernate4.2+Spring3的SSH2实验室电脑管理系统 1

    毕业设计 基于SSH2实验室电脑管理系统,使用Struts2+Hibernate4.2+Spring3等JavaWeb框架完成

    Blazeds + Stuts2 + Spring3 + Jpa(Hibernate) + 主动推送消息

    这是BlazeDS的java端工程,其中用的是flex-spring插件,并且实现了服务器主动推送消息给客户端,工程是用maven3来管理的。 另外工程中用到了Struts2 + spring + jpa的整合,其中Struts2与BlazeDS无关。

    Stuts +Spring + Hibernate整合简单项目开发

    Demo实现了Spring 管理Stuts 和hibernate 技术(内容很简单,适合初学者)我是因为下载一个没有分了,所以上传一个简单的Demo上去。功能实现了从数据库映射出数据;供参考,含数据.sql文件;(因为spring可以管理...

    集合 struts2+spring+hibernate

    SSH(Struts2、Spring、Hibernate)是Java开发中常见的三大开源框架,它们分别负责MVC模式中的表现层、业务层和服务层。本文将详细介绍如何在Eclipse环境中集成这三个框架,以一个简单的登录示例进行说明。 首先,...

    Stuts2.2.1+hibernate3.5.2+Spring 3.0.5框架 实现了增删改查

    这个框架实现了基本的增删改查 数据库为mysql 所有jar包都全 自己手动搭的 平台是myeclipse6.0 不是很专业 但是完全能用 希望对大家有所帮助 包中数据库文件 和说明文档都全 大家可以自己看着弄

    Stuts + Hibernian + 自定义标签封装的分页

    这是一个 Stuts + Hibernian + 自定义标签封装的分页,随处可以运用,有相应的测试示例,代码结构清晰,有详细注释,可供大家参考学习,若有疑问,加本人QQ:309677572 昵称:张军利

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    前几天搞 Spring + Hibernate + Struts 事务配置 ,网上找了好多资料,不过好无语,大多都是 Ctrl + V,浪费俺的宝贵时间 现在我总结配出一套,给大家参考参考,可能有不足,请大家多多交流。 附:内有弹出...

    Stuts2+hibernate3.0+Spring3.0整合

    Struts2、Hibernate3.0和Spring3.0是Java Web开发中著名的三大框架,它们分别负责MVC模式中的Action层、持久化层和业务层管理。SSH整合是指将这三个框架集成到一起,以实现更高效、更灵活的Web应用开发。在本项目中...

    用stuts+hibernate实现增删改查源代码

    2. **事务管理**:Hibernate支持事务处理,确保在数据库中的操作原子性和一致性。例如,当执行一个包含多条SQL语句的增删改查操作时,可以使用Hibernate的Transaction API来控制事务的开始、提交或回滚。 3. **数据...

    stuts+spring+hibernate整合

    - **实践**: 在Rox Network电子商务系统中,采用Struts+Spring+Hibernate框架整合的设计思想,成功实现了系统的快速开发。 - **优势**: - **提高开发效率**: 通过利用这三个框架的优势,减少了重复编码工作,提升了...

    Stuts2+Spring+JDBC的配置

    Struts2、Spring和JDBC是Java开发中常用的三大技术框架,它们的集成可以构建一个高效、可维护的Web应用程序。下面将详细讲解这三者之间的配置及其重要性。 首先,Struts2是一个基于MVC(Model-View-Controller)...

    struts+extjs实现UploadDialog

    在"struts+extjs实现UploadDialog"这个主题中,我们主要讨论如何利用Struts和ExtJS来创建一个文件上传对话框。UploadDialog通常是一个交互式的用户界面,允许用户选择本地文件并将其上传到服务器。 首先,让我们从...

    stuts2+ajax

    4. **JSP页面中的Ajax实现**:在JSP页面中,可以使用JavaScript库(如jQuery)发送Ajax请求到Struts2的Action,获取返回的数据,并动态更新DOM元素。例如,使用`$.ajax()`或`$.getJSON()`函数发起请求,将响应数据...

    Struts1 +Spring2+Hibernate3 无冲突jar包

    Struts1、Spring2和Hibernate3是Java Web开发中的三个重要框架,它们分别负责MVC模式的展现层、业务层和服务层的管理。这个“Struts1 + Spring2 + Hibernate3 无冲突jar包”集合了这三个框架的核心库,旨在为开发者...

    Struts+Spring框架下的单元测试[总结].pdf

    Struts和Spring是两个在Java Web开发中广泛使用的框架,Struts主要负责控制层的处理,而Spring则提供了全面的依赖注入(DI)和面向切面编程(AOP)等功能,便于实现业务逻辑和服务的解耦。在这样的框架组合下进行...

    stuts2 spring hibernate 集成

    完整的SSH集成,STRUTS2.0+SPRING 2.5+ HIBERNATE 3.6完美集成

Global site tag (gtag.js) - Google Analytics