先看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> ");
pw.println(previouspage(previouspage));
pw.print("<label style='font-size:12px;color:#000000'>上一页</label> ");
}else{
pw.print(firstpage());
pw.print("<a href='javascript:firstpage()' style='font-size:12px;color:#000000'>首页</a> ");
pw.println(previouspage(previouspage));
pw.print("<a href='javascript:previouspage()' style='font-size:12px;color:#000000'>上一页</a> ");
}
if(curpage==lastpage){
pw.println(nextpage(nextpage));
pw.print("<label style='font-size:12px;color:#000000'>下一页</label> ");
pw.print(lastpage(lastpage));
pw.print("<label style='font-size:12px;color:#000000'>尾页</label> ");
}else{
pw.println(nextpage(nextpage));
pw.print("<a href='javascript:nextpage()' style='font-size:12px;color:#000000'>下一页</a> ");
pw.print(lastpage(lastpage));
pw.print("<a href='javascript:lastpage()' style='font-size:12px;color:#000000'>尾页</a> ");
}
pw.print(" ");
pw.print("<span style='font-size:12px;color:#000000'>");
pw.print("[");
pw.print(curpage);
pw.print("/");
pw.print(pageinfo.getPagecount());
pw.print("]");
pw.print(" ");
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&password=" />
</Context>