Struts+Hibernate 分页标签(原创)

来源:互联网 发布:防御矩阵破解版 编辑:程序博客网 时间:2024/05/15 15:00

Struts+Hibernate 分页标签

默认分类 2009-02-08 14:42:31 阅读121 评论0 字号:

package com.east.split.common;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author:East(张栋芳)
 * @date:Jan 1, 2009
 * @content:字符转码的过滤器
 */
public class EncodingFilter implements Filter {

 public void destroy() {
  // TODO Auto-generated method stub

 }

 public void doFilter(ServletRequest req, ServletResponse res,
   FilterChain chain) throws IOException, ServletException {
  // TODO Auto-generated method stub
  HttpServletRequest request = (HttpServletRequest)req;
  HttpServletResponse response = (HttpServletResponse)res;
  request.setCharacterEncoding("GBK");
  response.setContentType("text/htm;charset=GBK");
  chain.doFilter(req, res);
 }
 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub

 }

}
------------------------------------------------------------------------------------------------------------------------

package com.east.split.common;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
 * @author:East(张栋芳)
 * @date:Dec 17, 2008
 * @content:Session和SessionFactory的创建和关闭
 */
public class HibernateUtils {
 static{
  
 }
 public HibernateUtils(){
  
 }
 private static SessionFactory factory;
    
 public static Session getSession() throws Exception {
  try {
   Configuration cfg = new Configuration().configure();
   factory = cfg.buildSessionFactory();
  } catch (Exception se) {
   se.printStackTrace();
   throw new SystemException("初始化Session出错..." + se.getMessage());
  }
  System.out.println("成功初始化Session");
  return factory.openSession();

 }

 public static SessionFactory getSessionFactory() throws Exception {
  try {
   return factory;
  } catch (Exception se) {
   se.printStackTrace();
   throw new SystemException("初始化SessionFactory出错..."
     + se.getMessage());
  }
 }

 public static void closeSession(Session session) throws Exception {
  try {
   if (session != null) {
    session.close();
   }
  } catch (Exception se) {
   se.printStackTrace();
   throw new SystemException("关闭Session出错..." + se.getMessage());
  }
 }

 public static void closeSessionFactory(SessionFactory factory)
   throws Exception {
  try {
   if (factory != null) {
    factory.close();
   }
  } catch (Exception se) {
   se.printStackTrace();
   throw new SystemException("关闭factory出错..." + se.getMessage());
  }
 }
 public static void main(String[] args)throws Exception {
  HibernateUtils.getSession();
 }

}
----------------------------------------------------------------------------------------------

package com.east.split.common;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class PageResult implements Serializable{
 /** 当前页 (默认值为1)* */
 private int pageNo = 1;

 /** 每页记录数(默认值10) * */
 private int pageSize = 10;

 /** 总记录数 * */
 private int recTotal = 0;

 /** 当前分页结果集 * */
 private List list = new ArrayList();

 /** 总页数 * */
 private int PageTotal = 0;

 // gett and sett
 public int getPageNo() {
  return pageNo;
 }

 public void setPageNo(int pageNo) {
  this.pageNo = pageNo;
 }

 public int getPageSize() {
  return pageSize;
 }

 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }

 public int getRecTotal() {

  return recTotal;
 }

 public void setRecTotal(int recTotal) {
  this.recTotal = recTotal;
 }

 public List getList() {
  return list;
 }

 public void setList(List list) {
  this.list = list;
 }

 // 获得总页数
 public int getPageTotal() {

  return (int) Math.ceil(((double) this.recTotal / this.pageSize));
 }
}
----------------------------------------------------------------------------------------------------------------------

package com.east.split.common;

import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import com.east.split.web.form.BaseForm;

public class PaginationTag extends TagSupport {

 private String formName;
 @Override
 public int doEndTag() {
  try {
   BaseForm baseForm = null;
   //获得标签form属性值对应的数据
   if (this.formName != null && !this.formName.trim().equals("")) {
    baseForm = (BaseForm)pageContext.getRequest().getAttribute(this.formName);
    if (baseForm == null) {
     baseForm = (BaseForm)pageContext.getSession().getAttribute(this.formName);
    }
    if (baseForm != null){
     //获得PageResult对象
     PageResult res = baseForm.getPageResult();
     JspWriter out = pageContext.getOut();
     StringBuffer buff = new StringBuffer();
     //相应页面的html
     buff.append("<div id=/"splitPageDiv/" style=/"text-align:right;padding:6px 6px 0 0;/">");
     buff.append("<form name='splitForm' action='query.do'>");
     buff.append("共:<font color=/"red/">" + res.getRecTotal()+"</font>条&nbsp;");
     buff.append("每页显示 <input type='text' name='pageResult.pageSize' size='2' value='"+ res.getPageSize() +"'> 条");
     buff.append("/" + res.getPageTotal() + "页 &nbsp;");
     buff.append("当前第 <input type='text' name='pageResult.pageNo' size='2' value='"+ res.getPageNo() +"'> 页 ");
     //buff.append("<input type='button'   value='首页' onclick='clickFirst();'> ");
     buff.append("<a href='javascript:clickFirst()'>首页</a>&nbsp;");
     //buff.append("<input type='button'   value='上一页' onclick='clickC();'> ");
     buff.append("<a href='javascript:clickC()'>上一页</a>&nbsp;");
     //buff.append("<input type='button'   value='下一页' onclick='clickNext();'> ");
     buff.append("<a href='javascript:clickNext()'>下一页</a>&nbsp;");
     //buff.append("<input type='button'  value='尾页' onclick='clickLast();'> ");
     buff.append("<a href='javascript:clickLast()'>尾页</a>&nbsp;");
     buff.append("<input type='button' id='go' value='go' onclick='clickGo();'> ");
     buff.append("</form>");
     
     //js
     buff.append("<script language='javaScript'>");
     
     //检查文本框数据的合法性 
     buff.append("function check(){" +
       "var pageSize = document.all('pageResult.pageSize').value; var pageNo = document.all('pageResult.pageNo').value;"+
       "if(isNaN(pageSize) || isNaN(pageNo)){alert('文本框必须数字!'); return false;}" +
       "else if(pageSize < 1 || pageNo < 1){alert('文本框必须大于1!'); return false;}" +
       "else {return true;}" +
       "}");
     //go
     buff.append("function clickGo(){if (check()){document.splitForm.submit();}}");
     //首页
     buff.append("function clickFirst(){document.all('pageResult.pageNo').value = 1;if(check())document.splitForm.submit();}");
     //上一页
     buff.append("function clickC(){var pageno = document.all('pageResult.pageNo').value;" +
       "if(pageno=pageno-1 >=1){document.all('pageResult.pageNo').value = document.all('pageResult.pageNo').value-1; if(check())document.splitForm.submit();}" +
       "}");
     //下一页
     buff.append("function clickNext(){var pageno = parseInt(document.all('pageResult.pageNo').value);" +
       "if(pageno=pageno+1 <="+res.getPageTotal()+"){document.all('pageResult.pageNo').value = parseInt(document.all('pageResult.pageNo').value)+1; if(check())document.splitForm.submit();}" +
       "}");
     //尾页
     buff.append("function clickLast(){document.all('pageResult.pageNo').value = "+res.getPageTotal()+";if(check())document.splitForm.submit();}");
     buff.append("</script>");
     buff.append("</div>");
     
     out.print(buff.toString());
    }
   }
  } catch (Exception e) {
   // TODO: handle exception
  }
  return 0;
  
  
 }
 public String getFormName() {
  return formName;
 }
 public void setFormName(String formName) {
  this.formName = formName;
 }
 
 
}
-------------------------------------------------------------------------------------

package com.east.split.common;
/**
 * @author:East(张栋芳)
 * @date:Dec 11, 2008
 * @content:所有系统的Exception
 */
public class SystemException extends Exception{
 public SystemException(String exMessage) {
  super(exMessage);
 }
}

--------------------------------------------------------------------

package com.east.split.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.east.split.common.HibernateUtils;
import com.east.split.common.PageResult;
import com.east.split.entity.UserInfo;

public class UserInfoDao {
 public static  boolean insertUser(UserInfo user){
  int result = 0;
  Session session = null;
  Transaction tran = null;
  try{
   session = HibernateUtils.getSession();
   tran = session.beginTransaction();
   session.save(user);
   tran.commit();
  }catch(Exception se){
   se.printStackTrace();
  }
  return result >0 ? true : false;
 }
 public PageResult selectUser(PageResult page){
  Session session = null;
  List list = new ArrayList();
  try{
   session = HibernateUtils.getSession();
   list = session.createQuery("From UserInfo")
   .setFirstResult((page.getPageNo()-1)*page.getPageSize())
   .setMaxResults(page.getPageSize())
   .list();
   //当前页的数据信息
   page.setList(list);
   //设置总记录数
   int count = (Integer)session.createQuery("select count(*) from UserInfo").uniqueResult();
   page.setRecTotal(count);
   
  }catch(Exception se){
   se.printStackTrace();
  }
  return page;
 }
 
// public static void main(String [] args){
//  for (int i = 1; i <1000; i++) {
//   UserInfo user = new UserInfo();
//   user.setUserName("east--"+i);
//   user.setUserAge(i);
//   UserInfoDao.insertUser(user);
//  }
// }
 
}
-----------------------------------------------------------------------------------

package com.east.split.entity;

/**
 * UserInfo entity.
 *
 * @author MyEclipse Persistence Tools
 */

public class UserInfo implements java.io.Serializable {

 // Fields

 private Integer userId;
 private String userName;
 private Integer userAge;

 // Constructors

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

 /** minimal constructor */
 public UserInfo(Integer userId) {
  this.userId = userId;
 }

 /** full constructor */
 public UserInfo(Integer userId, String userName, Integer userAge) {
  this.userId = userId;
  this.userName = userName;
  this.userAge = userAge;
 }

 // Property accessors

 public Integer getUserId() {
  return this.userId;
 }

 public void setUserId(Integer userId) {
  this.userId = userId;
 }

 public String getUserName() {
  return this.userName;
 }

 public void setUserName(String userName) {
  this.userName = userName;
 }

 public Integer getUserAge() {
  return this.userAge;
 }

 public void setUserAge(Integer userAge) {
  this.userAge = userAge;
 }

}

--------------------------------------------------------------

package com.east.split.web.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.east.split.common.PageResult;
import com.east.split.dao.UserInfoDao;
import com.east.split.web.form.UserInfoActionForm;

public class UserInfoAction extends Action{
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  String path="index";
  try{
   UserInfoActionForm userForm = (UserInfoActionForm)form;
   PageResult page = userForm.getPageResult();
   PageResult pageResult = new UserInfoDao().selectUser(page);
   userForm.setPageResult(pageResult);
  }catch(Exception se){
   se.printStackTrace();
  }
  
  return mapping.findForward(path);
 }

}
------------------------------------------------------------------------------

package com.east.split.web.form;

import org.apache.struts.action.ActionForm;

import com.east.split.common.PageResult;
/**
 * 基本ActionForm对象
 * @author MABI
 */
public class BaseForm extends ActionForm {

 private PageResult pageResult = new PageResult();

 public PageResult getPageResult() {
  return pageResult;
 }

 public void setPageResult(PageResult pageResult) {
  this.pageResult = pageResult;
 }

 
}
---------------------------------------------------------------------------------

package com.east.split.web.form;

import com.east.split.entity.UserInfo;

public class UserInfoActionForm extends BaseForm{
 private UserInfo user = new UserInfo();

 public UserInfo getUser() {
  return user;
 }

 public void setUser(UserInfo user) {
  this.user = user;
 }
 
 
}
------------------------

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@taglib prefix="logic" uri="http://struts.apache.org/tags-logic"%>
<%@taglib prefix="split" uri="/WEB-INF/splitPage.tld"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
  <body>
   <center>
    
    <table>
    <th>编号</th><th>姓名</th><th>年龄</th>
       <logic:iterate id="userForm" name="userForm" property="pageResult.list">
      <tr>
       <td>${user.userId }</td>
       <td>${user.userName }</td>
       <td>${user.userAge}</td>
      </tr>
     </logic:iterate>
                 <!-- userForm为strust-config中的userForm 二种可以要一个就行了-->
     <c:forEach var="user" items="${requestScope.userForm.pageResult.list}">
       <tr>
       <td>${user.userId }</td>
       <td>${user.userName }</td>
       <td>${user.userAge}</td>
      </tr>
     </c:forEach>
    </table>
    
   </center> 
    
    <split:splitPage formName="userForm"/>
   
  </body>
</html>
-----------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
 <tlibversion>1.2</tlibversion>
 <jspversion>1.1</jspversion>
 <shortname>common</shortname>
 <uri>http://www.jb-aptech.com.cn/taglibs/common</uri>
 
 
 <tag>
  <name>splitPage</name>
  <tagclass>com.east.split.common.PaginationTag</tagclass>
  <bodycontent>empty</bodycontent>
  
  <attribute>
   <name>formName</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
 </tag>
 
</taglib>

----------------------