Struts+Spring+Hibernate+自定义标签完成分页查询

话不多说,直接看代码,基本都有注释,很简单的例子

 

mysql 脚本:

并插入一定数量的数据

CREATE   TABLE  `users` (
  `id` 
int ( 11 NOT   NULL   default   ' 0 ' ,
  `name` 
varchar ( 20 default   NULL ,
  `age` 
varchar ( 20 default   NULL ,
  
PRIMARY   KEY   (`id`)
) ENGINE
= InnoDB  DEFAULT  CHARSET = gb2312;

 

BaseAction:

 

package  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.springframework.web.struts.ActionSupport;

public   abstract   class  BaseAction  extends  ActionSupport  {

    
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
{
          
return doBusiness(mapping,form,request,response);
    }

    
//具体actoin的业务方法
    public abstract ActionForward doBusiness (ActionMapping mapping, ActionForm form,
                                              HttpServletRequest request, HttpServletResponse response);
}

 UserListAction

 

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/

package  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  service.IUserService;
import  util.PageBean;

/** 
 * MyEclipse Struts
 * Creation date: 09-06-2007
 * 
 * XDoclet definition:
 * @struts.action validate="true"
 
*/

public   class  UserListAction  extends  BaseAction  {

    
    
    
public ActionForward doBusiness(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
{
        
/*
         * 设置一个开始索引号,如果传入的page即为下一页第一个元素的索引号,hibernate设置此startIndex为firstResut
         
*/

        
int startIndex;
        
if(request.getParameter("page")==null){
            startIndex
=0;
        }

        
else{
            startIndex
=Integer.parseInt(request.getParameter("page"));
        }


        
//访问业务方法,得到封装好页数,结果等信息的PageBean
        PageBean pageBean=((IUserService)this.getWebApplicationContext().getBean("userService")).getAllUsers(startIndex);
        request.setAttribute(
"pageBean", pageBean);
        
return mapping.findForward("success");
    }



}

 

IUserService

 

package  service;

import  util.PageBean;

public   interface  IUserService  {
   
public PageBean getAllUsers(int firstResut);
   
public int getAllUsersCount();
}

 

UserServiceImpl

 

package  service;

import  util.PageBean;
import  dao.IUserDAO;

public   class  UserServiceImpl  implements  IUserService  {

    
private IUserDAO userDAO;
    
public IUserDAO getUserDAO() {
        
return userDAO;
    }

    
public void setUserDAO(IUserDAO userDAO) {
        
this.userDAO = userDAO;
    }

    
    
//获得分页后的结果
    public PageBean getAllUsers(int firstResut) {
        
int totalCount=this.getAllUsersCount();
        
return userDAO.getAllUsers(firstResut, PageBean.getPAGE_MAX_NUMBER(),totalCount);
    
    }

    
    
//取得记录总数
    public int getAllUsersCount(){
        
return userDAO.getAllUsersCount();
    }


}

 

IUserDAO

 

package  dao;

import  util.PageBean;
import  org.hibernate.dialect.MySQL5Dialect;
public   interface  IUserDAO  {
  
public PageBean getAllUsers(int firstResut,int maxResult,int totalCount);
  
public int getAllUsersCount();
}

 

UserDAOImpl

 

package  dao;

import  java.sql.SQLException;
import  java.util.List;

import  org.hibernate.HibernateException;
import  org.hibernate.Query;
import  org.hibernate.Session;
import  org.springframework.orm.hibernate3.HibernateCallback;
import  org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import  util.PageBean;

public   class  UserDAOImpl  extends  HibernateDaoSupport   implements  IUserDAO {

    
//根据传入的开始索引号和PageBean中定义的每页最大数,查询结果,封装成PageBean
    public PageBean getAllUsers(final int firstResult, final int maxResult,final int totalCount) {
        
        
return (PageBean)getHibernateTemplate().execute(new HibernateCallback(){
            
public Object doInHibernate(Session session) throws HibernateException, SQLException{
                Query query
=session.createQuery("from Users");
                query.setFirstResult(firstResult
-1);
                query.setMaxResults(maxResult);
                List result
=query.list();
                PageBean pageBean
=new PageBean(result,totalCount,firstResult);

                
                
return pageBean;
            }

        }
true);
    }


    
//获得记录总数
    public int getAllUsersCount() {
        String hql 
= "select count(*) from Users as user";
        Long count 
= (Long)getHibernateTemplate().find(hql).listIterator().next();
        
return count.intValue();
    }

    
    

}

 

domain:

 

package  domain;

/**
 * Users generated by MyEclipse Persistence Tools
 
*/


public   class  Users  implements  java.io.Serializable  {

    
// Fields

    
private Integer id;
    
private String name;
    
private String age;

    
// Constructors

    
/** default constructor */
    
public Users() {
    }


    
/** minimal constructor */
    
public Users(Integer id) {
        
this.id = id;
    }


    
/** full constructor */
    
public Users(Integer id, String name, String age) {
        
this.id = id;
        
this.name = name;
        
this.age = age;
    }


    
// Property accessors

    
public Integer getId() {
        
return this.id;
    }


    
public void setId(Integer id) {
        
this.id = id;
    }


    
public String getName() {
        
return this.name;
    }


    
public void setName(String name) {
        
this.name = name;
    }


    
public String getAge() {
        
return this.age;
    }


    
public void setAge(String age) {
        
this.age = age;
    }


}

 

user.hbm.xml

 

<? xml version="1.0" encoding="utf-8" ?>
<! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!--  
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
< hibernate-mapping >
    
< class  name ="domain.Users"  table ="users"  catalog ="page" >
        
< id  name ="id"  type ="java.lang.Integer" >
            
< column  name ="id"   />
            
< generator  class ="assigned"   />
        
</ id >
        
< property  name ="name"  type ="java.lang.String" >
            
< column  name ="name"  length ="20"   />
        
</ property >
        
< property  name ="age"  type ="java.lang.String" >
            
< column  name ="age"  length ="20"   />
        
</ property >
    
</ class >
</ hibernate-mapping >

 

ContextLoaderListener

 

package  util;

import  javax.servlet.ServletContextEvent;

import  org.springframework.context.ApplicationContext;
import  org.springframework.web.context.support.WebApplicationContextUtils;

public   class  ContextLoaderListener  extends
        org.springframework.web.context.ContextLoaderListener 
{


    
public void contextInitialized(ServletContextEvent event) {
        
// TODO Auto-generated method stub
        super.contextInitialized(event);
        ApplicationContext context
=WebApplicationContextUtils.getRequiredWebApplicationContext(event.getServletContext());
    }

       
}

PageBean

 

package  util;

import  java.util.List;

public   class  PageBean  {
  
private static final int PAGE_MAX_NUMBER=5;//每页显示的最大数
  private int currentPage=0//当前页码
  private int nextPage=0;    //下一页码
  private int previousPage=0//上一页码
  private List resultList=null;  //数据集合
  private int nextReusltIndex=1+PAGE_MAX_NUMBER; //下一页开始的数据索引号
  private int previousResultIndex=0//上一页开始的数据索引号
  private int currentResultIndex=0;  //当前页开始的索引号
  private int pageCount=0//总页数
  private int totlaCount=0//总记录数
  private int firstPageResultIndex=0//第一页数据索引
  private int lastPAgeResultIndex=0//最后一页数据索引

public int getFirstPageResultIndex() {
    
return 0;
}

public int getLastPAgeResultIndex() {
    
if(resultList.size()%PAGE_MAX_NUMBER==0){
        
return (this.getPageCount()-1)*PAGE_MAX_NUMBER+1;
    }
else{
        
return (resultList.size()-resultList.size()%PAGE_MAX_NUMBER)+1;
    }

}

public PageBean(){
    
}
  
public PageBean(List resultList,  int totlaCount,int currentResultIndex) {
    
super();
    
this.resultList = resultList;
    
this.currentResultIndex = currentResultIndex;
    
this.totlaCount = totlaCount;
}


public int getCurrentPage() {
    
return this.getCurrentResultIndex()/this.getPAGE_MAX_NUMBER()+1;
}


public int getNextPage() {
    
if(this.getCurrentPage()==this.getPageCount()){
        
return this.getCurrentResultIndex();
    }

    
else{
        
return this.getCurrentPage()+1;
    }


}


public int getPreviousPage() {
    
if(this.getCurrentPage()==1){
        
return this.getCurrentPage();
    }

    
else{
        
return this.getCurrentPage()-1;
    }

}


public List getResultList() {
    
return resultList;
}

public void setResultList(List resultList) {
    
this.resultList = resultList;
}

public int getNextReusltIndex() {
      
if(this.getCurrentPage()==this.getPageCount()){
          
return this.getCurrentResultIndex();
      }

      
else{
          
return this.getCurrentResultIndex()+this.getPAGE_MAX_NUMBER()+1;
      }

}


public int getPreviousResultIndex() {
     
if(this.getCurrentPage()==1){
         
return this.getCurrentResultIndex();
     }

     
else{
         
return this.getCurrentResultIndex()-this.getPAGE_MAX_NUMBER();
     }

}



public int getCurrentResultIndex() {
    
return currentResultIndex;
}

public void setCurrentResultIndex(int currentResultIndex) {
    
this.currentResultIndex = currentResultIndex;
}

public int getPageCount() {
    
if(this.getTotlaCount()==0){
        
return 0;
    }

    
else{
    
        
return this.getTotlaCount()/PAGE_MAX_NUMBER+1;
    }

}


public static int getPAGE_MAX_NUMBER() {
    
return PAGE_MAX_NUMBER;
}

public int getTotlaCount() {
    
return totlaCount;
}

  
    
      
}

 

PageTag

 

package  util;

import  java.io.IOException;
import  java.util.List;

import  javax.servlet.jsp.JspException;
import  javax.servlet.jsp.JspWriter;
import  javax.servlet.jsp.tagext.SimpleTagSupport;

public   class  PageTag  extends  SimpleTagSupport  {
    
private String pagebean;

    
    
    
    
public void doTag() throws JspException, IOException {
        
super.doTag();
        PageBean pageBean
=(PageBean)getJspContext().getAttribute(this.getPagebean());
        
        
        
int currentPage=pageBean.getCurrentPage();
        
int nextPage=pageBean.getNextPage();
        
int previousPage=pageBean.getPreviousPage();
        
int nextResultIndex=pageBean.getNextReusltIndex();
        
int previousResultIndex=pageBean.getPreviousResultIndex();
        
int pageCount=pageBean.getPageCount();
        
int firstResultIndex=pageBean.getFirstPageResultIndex();

        
int lastResultIndex=pageBean.getLastPAgeResultIndex();
        JspWriter out
=getJspContext().getOut();
        StringBuffer buffer
=new StringBuffer();
        buffer.append(
"<a href="/PageSwitch/userList.do?page="+firstResultIndex+"">"+"第一页</a>");
        buffer.append(
"<a href="/PageSwitch/userList.do?page="+previousResultIndex+"">"+"上一页</a>");
        buffer.append(
"<a href="/PageSwitch/userList.do?page="+nextResultIndex+"">"+"下一页</a>");
        buffer.append(
"<a href="/PageSwitch/userList.do?page="+lastResultIndex+"">"+"末一页</a>");
        buffer.append(
""+currentPage+"页,共"+pageCount+"");
        out.print(buffer.toString());
    }

    
public String getPagebean() {
        
return pagebean;
    }

    
public void setPagebean(String pagebean) {
        
this.pagebean = pagebean;
    }





    



    
    
}

 

page.tld

 

<? xml version="1.0" encoding="UTF-8"  ?>

< taglib  xmlns ="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
    version
="2.0" >   
      
< tlib-version > 1.0 </ tlib-version >
  
< jsp-version > 2.0 </ jsp-version >  
< tag >
  
< name > page </ name >
  
< tagclass > util.PageTag </ tagclass >
  
< bodycontent > empty </ bodycontent >
  
< attribute >
      
< name > pagebean </ name >
      
< required > true </ required >
      
< rtexprvalue > false </ rtexprvalue >
   
</ attribute >
</ tag >
</ taglib >

 

web.xml

 

<? xml version="1.0" encoding="UTF-8" ?>
< web-app  xmlns ="http://java.sun.com/xml/ns/j2ee"  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"  version ="2.4"  xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
  
  
< context-param >
    
< param-name > contextConfigLocation </ param-name >
    
< param-value > /WEB-INF/applicationContext.xml </ param-value >
  
</ context-param >
   
< listener >
    
< listener-class > util.ContextLoaderListener </ listener-class >
  
</ listener >  
  
< servlet >
    
< servlet-name > action </ servlet-name >
    
< servlet-class > org.apache.struts.action.ActionServlet </ servlet-class >
    
< init-param >
      
< param-name > config </ param-name >
      
< param-value > /WEB-INF/struts-config.xml </ param-value >
    
</ init-param >
    
< init-param >
      
< param-name > debug </ param-name >
      
< param-value > 3 </ param-value >
    
</ init-param >
    
< init-param >
      
< param-name > detail </ param-name >
      
< param-value > 3 </ param-value >
    
</ init-param >
    
< load-on-startup > 0 </ load-on-startup >
  
</ servlet >
  
< servlet-mapping >
    
< servlet-name > action </ servlet-name >
    
< url-pattern > *.do </ url-pattern >
  
</ servlet-mapping >
  
< welcome-file-list >
    
< welcome-file > index.jsp </ welcome-file >
  
</ welcome-file-list >
  
< jsp-config >
< taglib >
    
< taglib-uri > pageTag </ taglib-uri >
    
< taglib-location > /WEB-INF/page.tld </ taglib-location >
  
</ taglib >
</ jsp-config >
</ web-app >

 

applicationContext.xml

 

<? xml version="1.0" encoding="UTF-8" ?>
< beans
    
xmlns ="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >


< bean  id ="dataSource"  class ="org.apache.commons.dbcp.BasicDataSource" >
 
< property  name ="driverClassName" >
    
< value > com.mysql.jdbc.Driver </ value >
  
</ property >
 
< property  name ="url" >
  
< value > jdbc:mysql://localhost:3306/page </ value >
 
</ property >
 
< property  name ="username" >
   
< value > root </ value >
 
</ property >
 
< property  name ="password" >
   
< value > 1234 </ value >
 
</ property >
</ bean >

< bean  id ="sessionFactory"  class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
  
< property  name ="dataSource" >
    
< ref  bean ="dataSource" />
  
</ property >
  
< property  name ="hibernateProperties" >
    
< props >
      
< prop  key ="hibernate.dialect" > org.hibernate.dialect.MySQL5Dialect </ prop >
      
< prop  key ="hibernate.show_sql" > false </ prop >
    
</ props >
  
</ property >
  
< property  name ="mappingResources" >
   
< list >
     
< value > domain/Users.hbm.xml </ value >
   
</ list >
  
</ property >
</ bean >

< bean  id ="transactionManager"  class ="org.springframework.orm.hibernate3.HibernateTransactionManager" >
  
< property  name ="sessionFactory" >
    
< ref  bean ="sessionFactory" />
  
</ property >
</ bean >

< bean  id ="userDAO"  class ="dao.UserDAOImpl" >
  
< property  name ="sessionFactory" >
    
< ref  bean ="sessionFactory" />
  
</ property >
</ bean >

< bean  id ="userService"  class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
  
< property  name ="transactionManager" >
    
< ref  bean ="transactionManager" />
  
</ property >
  
< property  name ="target" >
    
< bean  class ="service.UserServiceImpl" >
      
< property  name ="userDAO" >
        
< ref  bean ="userDAO" />
      
</ property >
    
</ bean >
  
</ property >
  
< property  name ="transactionAttributes" >
    
< props >
      
< prop  key ="get*" > PROPAGATION_REQUIRED </ prop >
    
</ props >
  
</ property >
</ bean >

</ beans >

 

struts-config.xml

 

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd" >

< struts-config >
  
< data-sources  />
  
< form-beans  />
  
< global-exceptions  />
  
< global-forwards  />
  
< action-mappings  >
    
< action  path ="/userList"  type ="action.UserListAction" >
      
< forward  name ="success"  path ="/result.jsp" ></ forward >
    
</ action >
  
</ action-mappings >

  
< message-resources  parameter ="ApplicationResources"   />
</ struts-config >

 

reuslt.jsp

 

<% @page language="java"  contentType="text/html;charset=gb2312" %>
<% @ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% @ taglib uri="/WEB-INF/page.tld" prefix="page"  %>
< html >
  
< head >
  
</ head >
  
< body >
  
     
< table  border ="1" >
       
< tr >
          
< td > id </ td >
          
< td > name </ td >
          
< td > age </ td >
       
</ tr >
        
< c:forEach  items ="${pageBean.resultList}"  var ="item"   >
         
< tr >
          
< td > &nbsp; < c:out  value ="${item.id}" ></ c:out ></ td >
          
< td > &nbsp; < c:out  value ="${item.name}" ></ c:out ></ td >
          
< td > &nbsp; < c:out  value ="${item.age}" ></ c:out ></ td >
         
</ tr >
        
</ c:forEach >   
     
</ table >
     
     
<!--  把request中的pageBean对象保存到page范围内,供customer jsp tag访问  -->
     
< c:set  value ="${pageBean}"  var ="pageBean"  scope ="page" />
     
< page:page  pagebean ="pageBean" />
  
</ body >
</ html >

 

启动入口:

http://localhost:81/PageSwitch/userList.do

 

页面如下(我建立了23个数据,每页5个):

idnameage
 1 john1 22
 2 john2 22
 3 john3 22
 4 john4 22
 5 john5 22
第一页 上一页 下一页 末一页第1页,共5页

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值