`
lpm528
  • 浏览: 83446 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

jsp自定义标签+jpa+hibernate+struts2实现的分页

    博客分类:
  • JSP
 
阅读更多

先看web.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>
  		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  	</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>*.action</url-pattern>
  </filter-mapping>
  
  <jsp-config>
	  <taglib>
		<taglib-uri>/tags/lpm</taglib-uri>           //跟上面定义的uri值一样
		<taglib-location>/WEB-INF/lpm.tld</taglib-location>   //写文件所在的路径
	  </taglib>
  </jsp-config>
  
</web-app>

 在看/WEB-INF/lpm.tld文件代码:

<?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>lpm</shortname>           <!-- 使用标签时的前缀 -->
    <uri>/tags/lpm</uri>
    
    <tag>
        <name>mytaglib</name>            <!-- 使用时跟在前缀后的名字,组合成一个标签 -->
        <tagclass>com.china.page.taglibpage</tagclass>      <!-- 在这里写刚才定义好的类 -->
        <bodycontent>jsp</bodycontent>  <!--可以为empty和jsp,如果为empty,开始标签和结束标签之间如果有jsp内容就会出错  -->
        <attribute>
          <name>formid</name>       <!--定义此标签可以用的属性名-->
          <required>true</required>   <!-- 表示这个属性是否可以为空,为true一定要有属性值 -->
          <rtexprvalue>true</rtexprvalue>   <!-- 表示是否可以使用JSP表达式 -->
        </attribute>
    </tag>
    
</taglib>

 

 

首页index.jsp加一个跳转:

     <a href="lpm/step.action">aaa</a>

 action代码:

package com.china.action;


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

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;

import com.china.model.persion;
import com.china.page.Pageinfo;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@Namespace("/lpm")
public class Lpmcon extends ActionSupport{

	@Action(value="step",
			results={@Result(name="Today",location="/test/abc.jsp")})
	public String getRes(){
		HttpServletRequest request=ServletActionContext.getRequest();
		try{
			EntityManagerFactory ef=Persistence.createEntityManagerFactory("mysql");
		    EntityManager em=ef.createEntityManager();
		    Query qu=em.createQuery("from persion order by userid");
		   
		    int count=qu.getResultList().size();
		    
		    Pageinfo pageinfo=new Pageinfo();
		    pageinfo.setCount(count);
		    String temp=request.getParameter("curpage");
		    if(temp!=null){
		    	pageinfo.setCurpage(Integer.parseInt(temp));
		    }
		   
            List list=qu.setFirstResult((pageinfo.getCurpage()-1)*pageinfo.getPagesize())
		                .setMaxResults(pageinfo.getPagesize())
		                .getResultList();
			
            request.setAttribute("pageinfo", pageinfo);
            request.setAttribute("list",list);
		}catch(Exception e){
			e.printStackTrace();
		}
		return "Today";
	
		
	}
}

Pageinfo代码:

 

package com.china.page;

public class Pageinfo {
    int count;   //总记录条数
    int pagesize=10;  //每页有几条
	int pagecount; //总共有几页 
	int curpage=1;
	
    public int getCurpage() {
		return curpage;
	}

	public void setCurpage(int curpage) {
		this.curpage = curpage;
	}

	public int getPagesize() {
		return pagesize;
	}

	public void setPagesize(int pagesize) {
		this.pagesize = pagesize;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}
	
	public int getPagecount() {
	    if(count%pagesize==0){
	    	pagecount=count/pagesize;
	    }else{
	    	pagecount=count/pagesize+1;
	    }
		return pagecount;
	}

	public void setPagecount(int pagecount) {
		this.pagecount = pagecount;
	}
	
}

 

 

自定义标签类com.china.page.taglibpage的代码:

package com.china.page;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.TagSupport;

public class taglibpage extends TagSupport{    //要继承类TagSupport通过覆盖它的方法来实现
	
	private String formid;
	private Pageinfo pageinfo;
	
	public String getFormid() {
		return formid;
	}

	public void setFormid(String formid) {
		this.formid = formid;
	}

	public Pageinfo getPageinfo() {
		return pageinfo;
	}

	public void setPageinfo(Pageinfo pageinfo) {
		this.pageinfo = pageinfo;
	}



	@Override
	public int doStartTag() throws JspException {
		try {
			HttpServletRequest request=(HttpServletRequest) pageContext.getRequest();//pageContext是继承的类TagSupport的属性
			pageinfo=(Pageinfo) request.getAttribute("pageinfo"); 
			int curpage=pageinfo.getCurpage();
			int lastpage=pageinfo.getPagecount();
			
			int nextpage=curpage+1;
			int previouspage=curpage-1;

            JspWriter pw=pageContext.getOut();   //不要用PringWriter,要用JspWriter,否则无法控制其位置
            if(curpage==1){
            	pw.print(firstpage());
    			pw.print("<label  style='font-size:12px;color:#000000'>首页</label>&nbsp;");
    			pw.println(previouspage(previouspage));		
    			pw.print("<label  style='font-size:12px;color:#000000'>上一页</label>&nbsp;");
            }else{
            	pw.print(firstpage());
    			pw.print("<a href='javascript:firstpage()' style='font-size:12px;color:#000000'>首页</a>&nbsp;");
    			pw.println(previouspage(previouspage));		
    			pw.print("<a href='javascript:previouspage()' style='font-size:12px;color:#000000'>上一页</a>&nbsp;");
            }
			if(curpage==lastpage){
				pw.println(nextpage(nextpage));		
				pw.print("<label style='font-size:12px;color:#000000'>下一页</label>&nbsp;");
			    pw.print(lastpage(lastpage));
				pw.print("<label style='font-size:12px;color:#000000'>尾页</label>&nbsp;");
			}else{
				pw.println(nextpage(nextpage));		
				pw.print("<a  href='javascript:nextpage()' style='font-size:12px;color:#000000'>下一页</a>&nbsp;");
			    pw.print(lastpage(lastpage));
				pw.print("<a  href='javascript:lastpage()' style='font-size:12px;color:#000000'>尾页</a>&nbsp;");
			}

			pw.print("&nbsp;");
			pw.print("<span style='font-size:12px;color:#000000'>");
			pw.print("[");
			pw.print(curpage);
			pw.print("/");
			pw.print(pageinfo.getPagecount());
			pw.print("]");
			pw.print("&nbsp;");
			pw.print("共");
			pw.print(pageinfo.getCount());
			pw.print("条");
			pw.print("</span>");
			
		} catch (IOException e) {
		
			e.printStackTrace();
		}
	 // return SKIP_BODY;               //跳过开始和结束标签之间的代码。
	   return EVAL_BODY_INCLUDE;        //将body的内容输出到存在的输出流中,包括是jsp代码,也可以被输出
	}
	
	  /**
     * 首页
     * @return
     */
	public String firstpage(){
		StringBuffer sb=new StringBuffer();
		sb.append("<SCRIPT type='text/javascript'>");
		sb.append(" function firstpage(){");
		sb.append(" var theform=document.getElementById('");
		sb.append(this.formid);
		sb.append("');");
	    sb.append(" theform.action=theform.action+'?curpage=1'; ");
       sb.append(" document.location.href=theform.action;");	
		sb.append("}");
		sb.append("</SCRIPT>");
		
		return sb.toString();
	}
	
	/**
	 * 上一页
	 * @param previouspage
	 * @return
	 */
	public String previouspage(int previouspage){
		StringBuffer sb=new StringBuffer();
		sb.append("<SCRIPT type='text/javascript'>");
		sb.append(" function previouspage(){");
		sb.append(" var theform=document.getElementById('");
		sb.append(this.formid);
		sb.append("');");
		sb.append(" theform.action=theform.action+'?curpage=").append(previouspage+"';");
        sb.append(" document.location.href=theform.action;");	
		sb.append("}");
		sb.append("</SCRIPT>");
		return sb.toString();
	}
	
	/**
	 * 下一页
	 * @param nextpage
	 * @return
	 */
	public String nextpage(int nextpage){
		StringBuffer sb=new StringBuffer();
		sb.append("<SCRIPT type='text/javascript'>");
		sb.append(" function nextpage(){");
		sb.append(" var theform=document.getElementById('");
		sb.append(this.formid);
		sb.append("');");
		sb.append(" theform.action=theform.action+'?curpage=").append(nextpage+"';");
        sb.append(" document.location.href=theform.action;");	
		sb.append("}");
		sb.append("</SCRIPT>");
		return sb.toString();
	}
   
	/**
	 * 尾页
	 * @param lastpage
	 * @return
	 */
	public String lastpage(int lastpage){
		StringBuffer sb=new StringBuffer();
		sb.append("<SCRIPT type='text/javascript'>\n");
		sb.append(" function lastpage(){");
		sb.append(" var theform=document.getElementById('");
		sb.append(this.formid);
		sb.append("');");
	    sb.append(" theform.action=theform.action+'?curpage=").append(lastpage+"';");
        sb.append(" document.location.href=theform.action;");	
		sb.append("}\n");
		sb.append("</SCRIPT>");
		
		return sb.toString();
	}
	


}

显示分页的界面abc.jsp代码为:

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'abc.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

</head>
  
  <body>
  <form action="<%=basePath%>lpm/step.action" id="fmcc">
  <table style="border:1px solid black">
     <thead>
        <tr style="border:1px solid black">
        <th>用户编号</th><th>用户名</th>
        </tr>
     </thead>  
     <tbody>
       <s:iterator value="#request.list" var="p">
        <tr style="border:1px solid black">
        <td><s:property value="#p.userid"/></td>
        <td><s:property value="#p.name"/></td>
        </tr>
       </s:iterator>
     </tbody>
  </table>
  </form>
  
  <div align="left">
    <lpm:mytaglib formid="fmcc" ></lpm:mytaglib>
  </div>
  </body>
</html>

 

 

 

 model层Persion实体类代码为:

 

package com.china.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="persion")
public class persion {
	  private Integer userid;
	  private String name;
   
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public Integer getUserid() {
		return userid;
	}
	public void setUserid(Integer userid) {
		this.userid = userid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
  
}

 persistence.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    
	<persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		   <jta-data-source>java:comp/env/jdbc/mysql</jta-data-source>
		  
		  
		   <class>com.china.model.persion</class>
		
		
		
	</persistence-unit>
  
</persistence>

tomcat中server.xml配置信息:

  <Context path="/pageTest" docBase="/pageTest"  reloadable="false" crossContext="true">		 
		<Resource name="jdbc/mysql"   auth="Container"  type="javax.sql.DataSource"  
		maxActive="5"   maxIdle="2"   maxWait="10000"   removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" 
		driverClassName="com.mysql.jdbc.Driver" 
		url="jdbc:mysql://localhost/lpm?user=root&amp;password=" /> 
 </Context>

  

分享到:
评论

相关推荐

    struts1+spring+JPA+jstl的CRUD操作,包含分页

    这个项目中的分页功能可能采用了JSTL的`&lt;c:forEach&gt;`标签配合自定义的分页标签库,或者使用了Spring或Struts1的插件来实现。分页不仅优化了用户体验,也减轻了服务器负载。 综合以上技术,这个项目展示了如何在一个...

    Spring+Hibernate+Struts实现分页

    5. **前端展示**:前端接收到分页数据后,使用JavaScript或者JSP标签库(如DisplayTag)渲染页面,展示分页内容。用户交互部分,如页码链接的激活状态和禁用状态,以及“下一页”、“上一页”按钮的状态,也需要在...

    struts+hibernate+spring集成实现分页

    2. **创建DAO**:实现分页查询的方法,使用Hibernate的Session或SessionFactory进行数据库操作。 3. **配置Service**:在Spring中声明Service,注入DAO,实现业务逻辑,包括计算总页数、获取当前页数据等。 4. **...

    struts2+spring+hibernate分页查询

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2主要用于MVC(Model-View-Controller)架构的实现,Spring作为全面的框架提供了依赖注入、事务管理、AOP(面向切面编程)等...

    struts+hibernate分页

    **Struts分页** 在Struts中,实现分页通常涉及以下几个步骤: 1. **Action类**:创建一个专门处理分页请求的Action类,该类需要获取并处理关于当前页面和每页显示条数的信息。 2. **Form Bean**:定义一个Form Bean...

    spring+struts+hibernate分页

    在实际开发中,可能还会使用到一些开源的分页组件,如Spring Data JPA的PagingAndSortingRepository,或者自定义的分页拦截器,以简化分页实现和提高性能。同时,考虑到性能优化,通常会缓存总记录数,避免每次分页...

    ssh Struts2.2+Hibernate3.6+Spring3.1+oracle 分页示例.zip

    在SSH框架中,分页通常通过Hibernate的Criteria API或者HQL来实现,也可以利用Struts2的拦截器或者自定义插件来处理分页逻辑。在Oracle数据库中,可以使用ROWNUM伪列或分页函数(如DBMS_RLS.PAGE_QUERY)来实现分页...

    ssh struts hibernate spring 分页

    在Struts中,可以通过自定义拦截器或者Action来实现分页。在Hibernate中,可以使用Criteria、HQL(Hibernate Query Language)或SQL的Limit子句进行分页查询。Spring提供了Pageable接口和Page对象,配合JPA(Java ...

    JAVA WEB典型模块与项目实战大全.part2(第二卷)

    典型模型与项目实战大全&gt;&gt; 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 ...第26章 权限管理系统(Struts 2.X+Spring+JPA) 第27章 商业银行设备巡检系统(Struts 2.X+Spring+Hibernate)

    JAVA WEB典型模块与项目实战大全.part4

    典型模型与项目实战大全&gt;&gt; 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 ...第26章 权限管理系统(Struts 2.X+Spring+JPA) 第27章 商业银行设备巡检系统(Struts 2.X+Spring+Hibernate)

    JAVA WEB典型模块与项目实战大全.part3(第三卷)

    典型模型与项目实战大全&gt;&gt; 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 ...第26章 权限管理系统(Struts 2.X+Spring+JPA) 第27章 商业银行设备巡检系统(Struts 2.X+Spring+Hibernate)

    struts写的分页

    6. **创建JSP页面**:在JSP页面上,使用JSTL或其他标签库(如Struts的DisplayTag库)来显示数据并构建分页链接。这些链接会携带页码参数,当用户点击时,会触发新的Action请求。 7. **处理用户交互**:当用户点击...

    ssh实现分页

    SSH(Struts2 + Spring...综上所述,SSH框架下的分页实现涉及Struts2、Spring和Hibernate等多个层面,通过合理设计和优化,可以提供高效且友好的分页功能。开发者需要熟悉这些组件的用法,并结合实际项目需求进行调整。

    ssh+oracle分页

    在Oracle分页中,Hibernate通过HQL(Hibernate Query Language)或SQL来执行查询,并支持Criteria、Query和Session的Criteria API等方式实现分页。通常,我们会通过设置`setFirstResult`和`setMaxResults`方法来指定...

    JAVA WEB典型模块与项目实战大全.part1(第一卷)

    典型模型与项目实战大全&gt;&gt; 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 ...第26章 权限管理系统(Struts 2.X+Spring+JPA) 第27章 商业银行设备巡检系统(Struts 2.X+Spring+Hibernate)

    分页查询

    2. 数据库查询部分,结合Hibernate的分页功能,可以在Service或DAO层完成,然后返回Page对象给Action,再由Struts2的插件或自定义标签处理前端显示。 总结,分页查询在Web开发中扮演着关键角色,能够有效地管理和...

    java分页技术汇总

    MyBatis可以通过动态SQL实现分页,同样有`LIMIT`和`OFFSET`方式,或者使用自定义插件如PageHelper,它提供了拦截器和分页对象,自动处理分页逻辑,使代码更简洁。 6. **Spring Data JPA分页**: Spring Data JPA...

    s2sh分页,s2sh分页

    在分页中,Struts2主要通过Action来处理请求,定义分页参数,并转发到对应的JSP页面。Action类中可以定义如当前页码(currentPage)和每页显示数量(itemsPerPage)等分页参数,然后通过业务层获取相应数据。 二、...

Global site tag (gtag.js) - Google Analytics