`
xangqun
  • 浏览: 82558 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

spring+hibernate+struts2 annotation实现分页(3)

阅读更多
这几天写了个ssh2分页实现,放到博客里留个记号,先贴代码有空再写说明了

struts2自定义标签实现
package com.xangqun.tag;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;

import com.opensymphony.xwork2.util.ValueStack;

public class PageStruts2Tag extends ComponentTagSupport{

	private static final long serialVersionUID = 1L;
	
    private int totalPage; //总页数
	
	private int currentPage; //当前页
	
    private int totalCount;  //总数
    
    private int displayNum=10;    //页面显示的页数
    
    private boolean isDisplaySelect= true;  //是否显示选择框
    
    private boolean isDisplayGoToPage= false; //是否显示输入框
    
    private String style="infoPage"; //样式id
    
	@Override
	public Component getBean(ValueStack stack, HttpServletRequest req,
			HttpServletResponse res) {
	   return new PageStrutsTwo(stack);
	}
	
	@Override
	protected void populateParams() {
		super.populateParams();
		PageStrutsTwo pst=(PageStrutsTwo)component;
		pst.setCurrentPage(currentPage);
		pst.setDisplayGoToPage(isDisplayGoToPage);
		pst.setDisplayNum(displayNum);
		pst.setDisplaySelect(isDisplaySelect);
		pst.setTotalCount(totalCount);
		pst.setTotalPage(totalPage);
		pst.setStyle(style); 
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public void setDisplayNum(int displayNum) {
		this.displayNum = displayNum;
	}

	public void setDisplaySelect(boolean isDisplaySelect) {
		this.isDisplaySelect = isDisplaySelect;
	}

	public void setDisplayGoToPage(boolean isDisplayGoToPage) {
		this.isDisplayGoToPage = isDisplayGoToPage;
	}

	public void setStyle(String style) {
		this.style = style;
	}
	
}

package com.xangqun.tag;

import java.io.Writer;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

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

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.components.Component;

import com.opensymphony.xwork2.util.ValueStack;

public class PageStrutsTwo extends Component {
	
    private int totalPage; //总页数
	
	private int currentPage; //当前页
	
    private int totalCount;  //总数
    
    private int displayNum=10;   //页面显示的页数
    
    private boolean isDisplaySelect= true; //是否显示选择框
    
    private boolean isDisplayGoToPage= false; //是否显示输入框
    
    private String style="infoPage"; //样式id
    
	public PageStrutsTwo(ValueStack stack) {
		super(stack);
	}

	@Override
	public boolean start(Writer writer) {
		boolean result = super.start(writer);   
		try{
			StringBuilder str=new StringBuilder(1024);
			String cleanUrl=getCleanUrl();
			boolean isValid=true;
			isValid =(this.getStack().findValue(String.valueOf(totalPage))== null && this.getStack().findValue(String.valueOf(totalCount))== null) ? false : true;
			if (isValid) { 
				str.append("<div id='").append(style).append("'><ul>");
		        if (currentPage > 1) {
		        	str.append("<li><a href='" + getCompleteUrl(cleanUrl, currentPage - 1) +
				              "' class='upPage' title='上一页'></a></li>");
				} else {
					str.append("<li><a class='upPage' title='目前已是第一页'></a></li>");
				}
				
		        if (displayNum == 0) {
		        	str.append("<li class='pages'><span class='currentPage'>" + currentPage + "</span>/" + totalPage + "</li>");
		          } else {
		            int pagenumber = displayNum;
		            int pagecenter = pagenumber / 2 - 1;
		            int pagebet = pagenumber / 2 + 1;
		            int beginPage = 1;
		            int endPage = 1;

		            if (currentPage < pagebet) {
		              beginPage = 1;
		            } else {
		              beginPage = currentPage - pagecenter;
		            }

		            if (currentPage + pagecenter > totalPage) {
		              endPage = totalPage;
		            } else {
		              endPage = currentPage + pagecenter;
		            }

		            if (currentPage + pagecenter < pagenumber) {
		              endPage = pagenumber;
		            }

		            if (endPage - currentPage < pagecenter) {
		              beginPage = totalPage - (pagenumber - 1);
		              if (beginPage != 1) {
		                beginPage += 1;
		              }
		            }

		            if (beginPage <= 0) {
		              beginPage = 1;
		            }

		            if (endPage > totalPage) {
		              endPage = totalPage;
		            }

		            if (currentPage >= pagebet && beginPage != 1) {
		            	str.append("<li><a href='" + getCompleteUrl(cleanUrl, 1) +
		                      "' class='everyPage'>1</a></li>");
		              if (currentPage != pagebet) {
		            	  str.append("<li>...&nbsp;</li>");
		              }
		            }

		            for (int i = beginPage; i <= endPage; i++) {

		              StringBuilder item=new StringBuilder(1024);
		              if (i != currentPage) {
		                item.append("<li><a href='" + getCompleteUrl(cleanUrl, i) +
		                        "' class='everyPage'>" + i +
		                        "</a></li>");
		              } else {
		                item.append("<li><a class='nowPage'>" + i +
		                        "</a></li>");
		              }
		              str.append(item);
		            }
		          }
		          if (currentPage < totalPage) {
		        	  str.append("<li><a href='" + getCompleteUrl(cleanUrl, currentPage + 1) +
		                    "' class='downPage' title='下一页'></a></li>");
		          } else {
		        	  str.append("<li><a class='downPage' title='目前已是最后一页'></a></li>");
		          }

		          boolean isSelect = isDisplaySelect;
		          if (isDisplayGoToPage) {
		            isSelect = false;
		            str.append("<li>&nbsp;&nbsp;到第&nbsp;<input id='inputPage' value='" + currentPage + "'/>&nbsp;页</li>");
		            StringBuilder script =new StringBuilder("javascript:var goPage=this.parentNode.parentNode.getElementsByTagName('input')[0].value;if(isNaN(goPage)||goPage>"
		            + totalPage + "||goPage<1||goPage==" + currentPage + ")return;document.location='" + getCompleteUrlNoParam(cleanUrl)
		            + "page='+goPage;return false;");
		            str.append("<li><a href='javascript:;' onclick=\"" + script + "\" class='goToPage'></a></li>");
		          }

		          if (isSelect) {
		        	  str.append("<li>&nbsp;&nbsp;到第&nbsp;<select name='select2' onchange=\"window.location.href='" +
		                    getCompleteUrlNoParam(cleanUrl) +
		                    "page='+this.options[this.selectedIndex].value + ''\">");
		            for (int iCount = 1; iCount <= totalPage; iCount++) {
		              String strSelected = "";
		              if (iCount == currentPage) {
		                strSelected = "selected";
		              }
		              str.append("<option value='" + iCount + "' " + strSelected + ">-" +
		                      iCount + "-</option>");
		            }
		            str.append("</select>&nbsp;页</li>");
		          }
		          str.append("</ul></div>");
			}
			 writer.write(str.toString());
			 
		}catch (Exception e) {
		}
		
		return result;
	}

	private String getCompleteUrlNoParam(String reqUrl) {
      if (reqUrl.indexOf("?") > 0) {
        return reqUrl + "&";
      } else {
        return reqUrl + "?";
      }
    }

	private String getCompleteUrl(String reqUrl, int page) {
       if (reqUrl.indexOf("?") > 0) {
         return reqUrl + "&page=" + page;
       } else {
        return reqUrl + "?page=" + page;
       }
    }

	private String getCleanUrl() throws Exception {
		HttpServletRequest request=(HttpServletRequest)ServletActionContext.getRequest();
		Map parameters=request.getParameterMap();
		boolean isFirst=true;
		Set entries=parameters.entrySet();
		Iterator it=entries.iterator();
		//TODO
		//这里的方法可以根据需要修改下
		String reqUrl=(String)request.getAttribute("struts.request_uri");
		HttpServletResponse response=(HttpServletResponse)ServletActionContext.getResponse();
		
		while(it.hasNext()){
			Map.Entry entry = (Map.Entry) it.next();
		    String Name = (String) entry.getKey();
		    String[] Value = (String[]) entry.getValue();
		    String[] temp = new String[Value.length];
		    for (int i = 0; i < Value.length; i++) {
		        temp[i] = Value[i];
		    }
		    
		    for (int i = 0; i < Value.length; i++) {
		        temp[i] = URLEncoder.encode(temp[i], "GBK");
		    }
		    if (Name.equalsIgnoreCase("page") == false) {
		        for (int j = 0; j < temp.length; j++) {
		          if (temp[j]!=null||temp[j]!="") {
		            if (isFirst) {
		              isFirst = false;
		              reqUrl += "?" + Name + "=" + temp[j];
		            } else {
		              String param = "&" + Name + "=" + temp[j];
		              String param2 = "&" + Name + "=" + temp[j] + "&";
		              if (reqUrl.indexOf(param2) < 0) {
		                if (reqUrl.endsWith(param) == false) {
		                  reqUrl += "&" + param;
		                }
		              }
		            }
		          }
		        }
		      }
		}
		return response.encodeURL(reqUrl);
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}
	public int getDisplayNum() {
		return displayNum;
	}

	public void setDisplayNum(int displayNum) {
		this.displayNum = displayNum;
	}
	public boolean isDisplaySelect() {
		return isDisplaySelect;
	}

	public void setDisplaySelect(boolean isDisplaySelect) {
		this.isDisplaySelect = isDisplaySelect;
	}
	public boolean isDisplayGoToPage() {
		return isDisplayGoToPage;
	}

	public void setDisplayGoToPage(boolean isDisplayGoToPage) {
		this.isDisplayGoToPage = isDisplayGoToPage;
	}
	public String getStyle() {
		return style;
	}

	public void setStyle(String style) {
		this.style = style;
	}
	
}

在WEB-INF目录下新建一个tlds目录,PageTags.tld放置在tlds目录里
PageTags.tld
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>pageTags</short-name>
    <uri>/PageTags</uri>
    <display-name>pageTags</display-name>
    <description></description>
    <tag>
     <name>PageStruts2Tag</name>
     <tag-class>com.xangqun.tag.PageStruts2Tag</tag-class>
     <body-content>JSP</body-content>
     <display-name>pageStruts2Tag</display-name>
	      <attribute>
            <name>totalPage</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>int</type>
        </attribute>
        <attribute>
            <name>currentPage</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>int</type>
        </attribute>
        <attribute>
            <name>style</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <name>totalCount</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>java.lang.String</type>
        </attribute>
         <attribute>
            <name>displayNum</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>int</type>
        </attribute>
        <attribute>
            <name>isDisplaySelect</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>boolean</type>
        </attribute>
        <attribute>
            <name>isDisplayGoToPage</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>boolean</type>
        </attribute>
    </tag>
</taglib>    

css样式自己写个就可以
<%@ page language="java" contentType="text/html; charset=gbk"
	pageEncoding="gbk"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib uri="/PageTags" prefix="pageTags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>demo</title>
<link rel="stylesheet" type="text/css" href="css/page.css" />
</head>
<body>
<s:iterator value="pagination.list" var="p">
   ${p.name}
</s:iterator>
<pageTags:PageStruts2Tag currentPage="${pagination.currentPage}" totalPage="${pagination.totalPage}" totalCount="${pagination.totalCount}" displayNum="6" />
</body>
</html>

效果看附件(点击看原图)
  • 大小: 13.2 KB
分享到:
评论

相关推荐

    Hibernate3.3.2+Spring2.5.5+Struts2.1.6+Extjs3.0.0

    通过以上步骤,我们可以构建出一个基于Hibernate、Spring、Struts 2和Extjs的技术栈,并利用这些技术的特点来实现快速开发。此框架不仅提高了开发效率,还增强了系统的可维护性和可扩展性。开发者可以根据实际项目...

    Spring2.5+Struts2.0+hibernate3.0+Dwr+jquery+displayTag

    2 利用struts2 的LoginAction-validation.xml 3 在bean里把service包;暴露DWR,写了一个验证用户名的流程 4 采用jpa作为POJO,还是减少配置 5 加入display的分页,并且是物理分页 打开后自已建表sql.txt jdbc....

    基于Annotation并对DAO层封装具有分页功能的S2SH整合实例

    在Java Web开发中,S2SH(Struts2 + Spring + Hibernate)是一个常见的技术栈,它结合了MVC框架Struts2、依赖注入容器Spring以及持久层框架Hibernate,以实现高效且灵活的Web应用开发。在这个基于Annotation并对DAO...

    基于spring,struts(struts2),hibernate的web项目脚手架

    内置一个基于数据库的代码生成器rapid-generator,极易进行二次开发 struts1,struts2的零配置 spring集成及加强,自动搜索hibernate的entity annotation class 集成动态构造sql的工具:rapid-xsqlbuilder 集成...

    使用Annotation并对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    本文将详细介绍如何通过使用注解来实现一个具备分页功能的DAO层封装,并完成S2SH(Struts + Spring + Hibernate)框架的整合实例。 #### 二、核心知识点解析 ##### 1. 注解(Annotation) - **定义**:注解是Java...

    使用配置文件对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    本文档旨在详细介绍如何使用配置文件的方式完成DAO层的封装,并在此基础上实现分页功能,最终达成S2SH(Struts、Spring、Hibernate)的整合。此文档作为对《使用Annotation并对DAO层封装具有分页功能的S2SH整合实例...

    OA 项目 SSH2 增删改查

    本项目基于SSH2框架实现,SSH2是Struts2、Hibernate和Spring的集成,这是一个经典的Java Web开发技术栈。下面我们将深入探讨SSH2框架以及在OA项目中的应用。 1. **Struts2**:Struts2是一个MVC(Model-View-...

    SSH_Annotaction高配架构

    SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架组合,用于构建高效、可扩展的企业级应用程序。在这个“SSH_Annotation高配架构”中,我们主要关注如何利用注解(Annotation)来简化配置,提升...

    SSH快速开发框架设计

    SSH快速开发框架是指整合了Struts、Spring和Hibernate三个开源框架的一种应用架构方案。它主要用于简化Java Web应用程序的开发流程,提高开发效率。 - **Struts 1.2**:负责处理前端请求并返回视图,提供MVC模式的...

    ssh数据库基本操作封装

    SSH(Struts + Spring + Hibernate)是一个经典的Java Web开发框架,用于构建企业级应用程序。在这个主题中,“ssh数据库基本操作封装”指的是将常用的数据库交互功能,如增删改查(CRUD),通过SSH框架进行封装,...

    标签: OA 项目 SSH2 增删改查

    本项目采用SSH2框架进行开发,SSH2是指Spring、Struts2和Hibernate这三个开源框架的组合,它们分别是应用层、表现层和持久层的技术解决方案。 Spring框架是Java企业级应用的核心组件,提供了依赖注入(Dependency ...

    SSH框架面试题.pdf

    Spring框架可以作为Hibernate和Struts的“胶水”层,通过Spring的依赖注入功能将Hibernate的DAO层和Struts的Action层连接起来。例如,可以将Hibernate的SessionFactory注入到DAO层,再通过Spring管理的Bean将DAO层...

    OA pagertaglib ssh2 增删改查

    首先,SSH2是指Spring、Struts2和Hibernate这三个开源框架的组合,它们是Java Web开发中的常用组件。Spring框架提供依赖注入和面向切面编程,帮助我们管理对象的生命周期和事务;Struts2则是一个强大的MVC(Model-...

    java课程大纲

    * Struts2 + Hibernate + Spring 的联合开发 * AJAX 框架的使用 * SSH2 的使用和 SSH2 整合 Android 应用开发 * Android 平台的开发 * Android 应用的设计和实现 项目实训 * 超级玛丽游戏开发 * 数据库连接池...

    企业管理OA系统

    SSH2是Spring、Struts2和Hibernate三个开源框架的组合,它们分别是企业级应用开发中的模型-视图-控制器(MVC)架构模式的主要组件。Spring提供了依赖注入和AOP(面向切面编程)等功能,使得代码更易于维护和测试;...

    java 学习的顺序(初学者)

    结合Hibernate,了解Spring支持Web的配置,尝试SSH(Struts2, Spring, Hibernate)集成项目。 8. **EJB 3.0**:了解企业级Java Bean,包括实体Bean、会话Bean和消息驱动Bean。学习如何在WebLogic 8或Jboss上部署和...

    免费下载:自己整理的java学习资料

    自己整理的一些资料,不需要积分,希望对大家有帮助。 里面包有如下的一些java资料 Ant使用指南.pdf cvs.pdf Eclipse入门-- Eclipse的使用简介及插件开发.PDF ...spring2中文开发参考手册.chm a.txt

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

Global site tag (gtag.js) - Google Analytics