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>条 ");
buff.append("每页显示 <input type='text' name='pageResult.pageSize' size='2' value='"+ res.getPageSize() +"'> 条");
buff.append("/" + res.getPageTotal() + "页 ");
buff.append("当前第 <input type='text' name='pageResult.pageNo' size='2' value='"+ res.getPageNo() +"'> 页 ");
//buff.append("<input type='button' value='首页' οnclick='clickFirst();'> ");
buff.append("<a href='javascript:clickFirst()'>首页</a> ");
//buff.append("<input type='button' value='上一页' οnclick='clickC();'> ");
buff.append("<a href='javascript:clickC()'>上一页</a> ");
//buff.append("<input type='button' value='下一页' οnclick='clickNext();'> ");
buff.append("<a href='javascript:clickNext()'>下一页</a> ");
//buff.append("<input type='button' value='尾页' οnclick='clickLast();'> ");
buff.append("<a href='javascript:clickLast()'>尾页</a> ");
buff.append("<input type='button' id='go' value='go' οnclick='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>
----------------------