Struts2中实现自定义分页标签2
2013-11-26 09:59
513 查看
<?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>2.2.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>tangs</short-name>
<uri>/tangs</uri>
<display-name>"Tangs Tags"</display-name>
<tag>
<name>pages</name>
<tag-class>com.tangs.tag.PageTag</tag-class> //标签类
<body-content>empty</body-content>
<attribute> //标签中的属性
<name>cpage</name> //属性名
<required>true</required> //是否必须
<rtexprvalue>true</rtexprvalue> //表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定
</attribute>
<attribute>
<name>total</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
<?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>2.2.3</tlib-version> <jsp-version>1.2</jsp-version>
<short-name>tangs</short-name> <uri>/tangs</uri> <display-name>"Tangs Tags"</display-name> <tag> <name>pages</name> <tag-class>com.tangs.tag.PageTag</tag-class> //标签类 <body-content>empty</body-content> <attribute> //标签中的属性 <name>cpage</name> //属性名 <required>true</required>
//是否必须 <rtexprvalue>true</rtexprvalue> //表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定 </attribute> <attribute> <name>total</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue>
</attribute> </tag></taglib>
2.编写标签类
PageTag.java
Java代码
package com.tangs.tag;
import com.opensymphony.xwork2.util.ValueStack;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
/**
* 分页标签
* @author tangs
*/
public class PageTag extends ComponentTagSupport {
private String cpage; //当前页
private String total; //总页数
private String url; //请求地址
public void setCpage(String cpage) {
this.cpage = cpage;
}
public void setTotal(String total) {
this.total = total;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) {
return new Pages(arg0); //返回Pages Component,分页的逻辑处理都在这个Component中
}
//获得参数
protected void populateParams() {
super.populateParams();
Pages pages = (Pages)component;
pages.setCpage(cpage);
pages.setTotal(total);
pages.setUrl(url);
}
}
package com.tangs.tag;import com.opensymphony.xwork2.util.ValueStack;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.components.Component;import org.apache.struts2.views.jsp.ComponentTagSupport;/**
* 分页标签 * @author tangs */public class PageTag extends ComponentTagSupport { private String cpage; //当前页 private String total; //总页数 private String url; //请求地址 public void setCpage(String cpage) { this.cpage = cpage; } public void setTotal(String total) { this.total
= total; } public void setUrl(String url) { this.url = url; } @Override public Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) { return new Pages(arg0); //返回Pages Component,分页的逻辑处理都在这个Component中 } //获得参数 protected void
populateParams() { super.populateParams(); Pages pages = (Pages)component; pages.setCpage(cpage); pages.setTotal(total); pages.setUrl(url); }}
Pages.java
Java代码
package com.tangs.tag;
import com.opensymphony.xwork2.util.ValueStack;
import java.io.IOException;
import java.io.Writer;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.struts2.components.Component;
/**
* 分页逻辑Bean
* @author tangs
*/
public class Pages extends Component {
private String cpage;
private String total;
private String url;
public String getCpage() {
return cpage;
}
public void setCpage(String cpage) {
this.cpage = cpage;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Pages(ValueStack arg0) {
super(arg0);
}
@Override
public boolean start(Writer writer) {
boolean result = super.start(writer);
try {
StringBuilder str = new StringBuilder();
boolean isValid = true;
//从ValueStack中取出数值
if (isValid) {
if (total.startsWith("%{") && total.endsWith("}")) {
total = total.substring(2, total.length() -1);
total = (String)this.getStack().findValue(total);
isValid = total == null ? false : true;
} else {
isValid = false;
}
}
if (isValid) {
if (cpage.startsWith("%{") && cpage.endsWith("}")) {
cpage = cpage.substring(2, cpage.length() - 1);
cpage = (String)this.getStack().findValue(cpage);
isValid = cpage == null ? false : true;
} else {
isValid = false;
}
}
if (isValid) {
if (url.startsWith("%{") && url.endsWith("}")) {
url = url.substring(2, url.length() - 1);
url = (String)this.getStack().findValue(url);
isValid = url == null ? false : true;
} else {
isValid = false;
}
}
if (isValid) {
Integer cpageInt = Integer.valueOf(cpage);
//当前页与总页数相等
if (cpage.equals(total)) {
//如果total = 1,则无需分页,显示“[第1页] [共1页]”
if ("1".equals(total)) {
str.append("[第 " + cpage + " 页]");
str.append(" [共 " + total + " 页]");
} else {
//到达最后一页,显示“[首页] [上一页] [末页]”
str.append("<a href='");
str.append(url);
str.append("?cpage=1&total="+total+"&url="+url);
str.append("'>[首页]</a> <a href='");
str.append(url);
str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);
str.append("'>[上一页]</a> <a href='");
str.append(url);
str.append("?cpage=" + total + "&total=" + total+"&url="+url);
str.append("'>[末页]</a>");
}
} else {
//当前页与总页数不相同
if ("1".equals(cpage)) {
//第一页,显示“[首页] [下一页] [末页]”
str.append("<a href='");
str.append(url);
str.append("?cpage=1&total="+total+"&url="+url);
str.append("'>[首页]</a> <a href='");
str.append(url);
str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url);
str.append("'>[下一页]</a> <a href='");
str.append(url);
str.append("?cpage=" + total + "&total=" + total+"&url="+url);
str.append("'>[末页]</a>");
} else {
//不是第一页,显示“[首页] [上一页] [下一页] [末页]”
str.append("<a href='");
str.append(url);
str.append("?cpage=1&total="+total+"&url="+url);
str.append("'>[首页]</a> <a href='");
str.append(url);
str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);
str.append("'>[上一页]</a> <a href='");
str.append(url);
str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url);
str.append("'>[下一页]</a> <a href='");
str.append(url);
str.append("?cpage=" + total + "&total=" + total+"&url="+url);
str.append("'>[末页]</a>");
}
}
}
writer.write(str.toString());
} catch (IOException ex) {
Logger.getLogger(Pages.class.getName()).log(Level.SEVERE, null, ex);
}
return result;
}
}
package com.tangs.tag;import com.opensymphony.xwork2.util.ValueStack;import java.io.IOException;import java.io.Writer;import java.util.logging.Level;import java.util.logging.Logger;import org.apache.struts2.components.Component;/**
* 分页逻辑Bean * @author tangs */public class Pages extends Component { private String cpage; private String total; private String url; public String getCpage() { return cpage; } public void setCpage(String cpage) { this.cpage = cpage; } public String getTotal()
{ return total; } public void setTotal(String total) { this.total = total; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public Pages(ValueStack arg0) { super(arg0); } @Override public boolean start(Writer writer)
{ boolean result = super.start(writer); try { StringBuilder str = new StringBuilder(); boolean isValid = true; //从ValueStack中取出数值 if (isValid) { if (total.startsWith("%{") && total.endsWith("}")) { total = total.substring(2, total.length() -1); total = (String)this.getStack().findValue(total);
isValid = total == null ? false : true; } else { isValid = false; } } if (isValid) { if (cpage.startsWith("%{") && cpage.endsWith("}")) { cpage = cpage.substring(2, cpage.length() - 1); cpage = (String)this.getStack().findValue(cpage); isValid = cpage == null
? false : true; } else { isValid = false; } } if (isValid) { if (url.startsWith("%{") && url.endsWith("}")) { url = url.substring(2, url.length() - 1); url = (String)this.getStack().findValue(url); isValid = url == null ? false : true; } else { isValid = false;
} } if (isValid) { Integer cpageInt = Integer.valueOf(cpage); //当前页与总页数相等 if (cpage.equals(total)) { //如果total = 1,则无需分页,显示“[第1页] [共1页]” if ("1".equals(total)) { str.append("[第 " + cpage + " 页]"); str.append(" [共 " + total + " 页]"); } else { //到达最后一页,显示“[首页]
[上一页] [末页]” str.append("<a href='"); str.append(url); str.append("?cpage=1&total="+total+"&url="+url); str.append("'>[首页]</a> <a href='"); str.append(url); str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url); str.append("'>[上一页]</a> <a href='");
str.append(url); str.append("?cpage=" + total + "&total=" + total+"&url="+url); str.append("'>[末页]</a>"); } } else { //当前页与总页数不相同 if ("1".equals(cpage)) { //第一页,显示“[首页] [下一页] [末页]” str.append("<a href='"); str.append(url); str.append("?cpage=1&total="+total+"&url="+url);
str.append("'>[首页]</a> <a href='"); str.append(url); str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url); str.append("'>[下一页]</a> <a href='"); str.append(url); str.append("?cpage=" + total + "&total=" + total+"&url="+url); str.append("'>[末页]</a>");
} else { //不是第一页,显示“[首页] [上一页] [下一页] [末页]” str.append("<a href='"); str.append(url); str.append("?cpage=1&total="+total+"&url="+url); str.append("'>[首页]</a> <a href='"); str.append(url); str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);
str.append("'>[上一页]</a> <a href='"); str.append(url); str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url); str.append("'>[下一页]</a> <a href='"); str.append(url); str.append("?cpage=" + total + "&total=" + total+"&url="+url); str.append("'>[末页]</a>");
} } } writer.write(str.toString()); } catch (IOException ex) { Logger.getLogger(Pages.class.getName()).log(Level.SEVERE, null, ex); } return result; }}
3.服务端
服务端主要是获得请求然后转向显示的页面
DisplayAction.java
Java代码
/* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.tangs.action;
import com.opensymphony.xwork2.ActionSupport;
/**
*
* @author tangs
*/
public class DisplayAction extends ActionSupport {
private String cpage;
private String total;
private String url;
public String list() {
//Get data from server
//...
//这里没有做任何逻辑,直接跳转到了页面
return SUCCESS;
}
public String getCpage() {
return cpage;
}
public void setCpage(String cpage) {
this.cpage = cpage;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.tangs.action;import com.opensymphony.xwork2.ActionSupport;/** * * @author tangs */public class DisplayAction extends ActionSupport
{ private String cpage; private String total; private String url; public String list() { //Get data from server //... //这里没有做任何逻辑,直接跳转到了页面 return SUCCESS; } public String getCpage() { return cpage; } public void setCpage(String cpage) { this.cpage = cpage;
} public String getTotal() { return total; } public void setTotal(String total) { this.total = total; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
struts.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
<package name="tagTest" extends="struts-default">
<action name="list" class="com.tangs.action.DisplayAction">
<result name="success">/list.jsp</result>
</action>
</package>
</struts>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" ><struts> <package name="tagTest" extends="struts-default">
<action name="list" class="com.tangs.action.DisplayAction"> <result name="success">/list.jsp</result> </action> </package></struts>
4.在页面中使用标签
list.jsp
Html代码
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="tangs" uri="/WEB-INF/tangs.tld"%>
<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>List</title>
</head>
<body>
共 <s:property value="total"/> 页 第 <s:property value="cpage"/> 页<br>
<tangs:pages cpage="%{cpage}" total="%{total}" url="%{url}"/>
</body>
</html>
<!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>2.2.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>tangs</short-name>
<uri>/tangs</uri>
<display-name>"Tangs Tags"</display-name>
<tag>
<name>pages</name>
<tag-class>com.tangs.tag.PageTag</tag-class> //标签类
<body-content>empty</body-content>
<attribute> //标签中的属性
<name>cpage</name> //属性名
<required>true</required> //是否必须
<rtexprvalue>true</rtexprvalue> //表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定
</attribute>
<attribute>
<name>total</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
<?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>2.2.3</tlib-version> <jsp-version>1.2</jsp-version>
<short-name>tangs</short-name> <uri>/tangs</uri> <display-name>"Tangs Tags"</display-name> <tag> <name>pages</name> <tag-class>com.tangs.tag.PageTag</tag-class> //标签类 <body-content>empty</body-content> <attribute> //标签中的属性 <name>cpage</name> //属性名 <required>true</required>
//是否必须 <rtexprvalue>true</rtexprvalue> //表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定 </attribute> <attribute> <name>total</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue>
</attribute> </tag></taglib>
2.编写标签类
PageTag.java
Java代码
package com.tangs.tag;
import com.opensymphony.xwork2.util.ValueStack;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
/**
* 分页标签
* @author tangs
*/
public class PageTag extends ComponentTagSupport {
private String cpage; //当前页
private String total; //总页数
private String url; //请求地址
public void setCpage(String cpage) {
this.cpage = cpage;
}
public void setTotal(String total) {
this.total = total;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) {
return new Pages(arg0); //返回Pages Component,分页的逻辑处理都在这个Component中
}
//获得参数
protected void populateParams() {
super.populateParams();
Pages pages = (Pages)component;
pages.setCpage(cpage);
pages.setTotal(total);
pages.setUrl(url);
}
}
package com.tangs.tag;import com.opensymphony.xwork2.util.ValueStack;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.components.Component;import org.apache.struts2.views.jsp.ComponentTagSupport;/**
* 分页标签 * @author tangs */public class PageTag extends ComponentTagSupport { private String cpage; //当前页 private String total; //总页数 private String url; //请求地址 public void setCpage(String cpage) { this.cpage = cpage; } public void setTotal(String total) { this.total
= total; } public void setUrl(String url) { this.url = url; } @Override public Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) { return new Pages(arg0); //返回Pages Component,分页的逻辑处理都在这个Component中 } //获得参数 protected void
populateParams() { super.populateParams(); Pages pages = (Pages)component; pages.setCpage(cpage); pages.setTotal(total); pages.setUrl(url); }}
Pages.java
Java代码
package com.tangs.tag;
import com.opensymphony.xwork2.util.ValueStack;
import java.io.IOException;
import java.io.Writer;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.struts2.components.Component;
/**
* 分页逻辑Bean
* @author tangs
*/
public class Pages extends Component {
private String cpage;
private String total;
private String url;
public String getCpage() {
return cpage;
}
public void setCpage(String cpage) {
this.cpage = cpage;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Pages(ValueStack arg0) {
super(arg0);
}
@Override
public boolean start(Writer writer) {
boolean result = super.start(writer);
try {
StringBuilder str = new StringBuilder();
boolean isValid = true;
//从ValueStack中取出数值
if (isValid) {
if (total.startsWith("%{") && total.endsWith("}")) {
total = total.substring(2, total.length() -1);
total = (String)this.getStack().findValue(total);
isValid = total == null ? false : true;
} else {
isValid = false;
}
}
if (isValid) {
if (cpage.startsWith("%{") && cpage.endsWith("}")) {
cpage = cpage.substring(2, cpage.length() - 1);
cpage = (String)this.getStack().findValue(cpage);
isValid = cpage == null ? false : true;
} else {
isValid = false;
}
}
if (isValid) {
if (url.startsWith("%{") && url.endsWith("}")) {
url = url.substring(2, url.length() - 1);
url = (String)this.getStack().findValue(url);
isValid = url == null ? false : true;
} else {
isValid = false;
}
}
if (isValid) {
Integer cpageInt = Integer.valueOf(cpage);
//当前页与总页数相等
if (cpage.equals(total)) {
//如果total = 1,则无需分页,显示“[第1页] [共1页]”
if ("1".equals(total)) {
str.append("[第 " + cpage + " 页]");
str.append(" [共 " + total + " 页]");
} else {
//到达最后一页,显示“[首页] [上一页] [末页]”
str.append("<a href='");
str.append(url);
str.append("?cpage=1&total="+total+"&url="+url);
str.append("'>[首页]</a> <a href='");
str.append(url);
str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);
str.append("'>[上一页]</a> <a href='");
str.append(url);
str.append("?cpage=" + total + "&total=" + total+"&url="+url);
str.append("'>[末页]</a>");
}
} else {
//当前页与总页数不相同
if ("1".equals(cpage)) {
//第一页,显示“[首页] [下一页] [末页]”
str.append("<a href='");
str.append(url);
str.append("?cpage=1&total="+total+"&url="+url);
str.append("'>[首页]</a> <a href='");
str.append(url);
str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url);
str.append("'>[下一页]</a> <a href='");
str.append(url);
str.append("?cpage=" + total + "&total=" + total+"&url="+url);
str.append("'>[末页]</a>");
} else {
//不是第一页,显示“[首页] [上一页] [下一页] [末页]”
str.append("<a href='");
str.append(url);
str.append("?cpage=1&total="+total+"&url="+url);
str.append("'>[首页]</a> <a href='");
str.append(url);
str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);
str.append("'>[上一页]</a> <a href='");
str.append(url);
str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url);
str.append("'>[下一页]</a> <a href='");
str.append(url);
str.append("?cpage=" + total + "&total=" + total+"&url="+url);
str.append("'>[末页]</a>");
}
}
}
writer.write(str.toString());
} catch (IOException ex) {
Logger.getLogger(Pages.class.getName()).log(Level.SEVERE, null, ex);
}
return result;
}
}
package com.tangs.tag;import com.opensymphony.xwork2.util.ValueStack;import java.io.IOException;import java.io.Writer;import java.util.logging.Level;import java.util.logging.Logger;import org.apache.struts2.components.Component;/**
* 分页逻辑Bean * @author tangs */public class Pages extends Component { private String cpage; private String total; private String url; public String getCpage() { return cpage; } public void setCpage(String cpage) { this.cpage = cpage; } public String getTotal()
{ return total; } public void setTotal(String total) { this.total = total; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public Pages(ValueStack arg0) { super(arg0); } @Override public boolean start(Writer writer)
{ boolean result = super.start(writer); try { StringBuilder str = new StringBuilder(); boolean isValid = true; //从ValueStack中取出数值 if (isValid) { if (total.startsWith("%{") && total.endsWith("}")) { total = total.substring(2, total.length() -1); total = (String)this.getStack().findValue(total);
isValid = total == null ? false : true; } else { isValid = false; } } if (isValid) { if (cpage.startsWith("%{") && cpage.endsWith("}")) { cpage = cpage.substring(2, cpage.length() - 1); cpage = (String)this.getStack().findValue(cpage); isValid = cpage == null
? false : true; } else { isValid = false; } } if (isValid) { if (url.startsWith("%{") && url.endsWith("}")) { url = url.substring(2, url.length() - 1); url = (String)this.getStack().findValue(url); isValid = url == null ? false : true; } else { isValid = false;
} } if (isValid) { Integer cpageInt = Integer.valueOf(cpage); //当前页与总页数相等 if (cpage.equals(total)) { //如果total = 1,则无需分页,显示“[第1页] [共1页]” if ("1".equals(total)) { str.append("[第 " + cpage + " 页]"); str.append(" [共 " + total + " 页]"); } else { //到达最后一页,显示“[首页]
[上一页] [末页]” str.append("<a href='"); str.append(url); str.append("?cpage=1&total="+total+"&url="+url); str.append("'>[首页]</a> <a href='"); str.append(url); str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url); str.append("'>[上一页]</a> <a href='");
str.append(url); str.append("?cpage=" + total + "&total=" + total+"&url="+url); str.append("'>[末页]</a>"); } } else { //当前页与总页数不相同 if ("1".equals(cpage)) { //第一页,显示“[首页] [下一页] [末页]” str.append("<a href='"); str.append(url); str.append("?cpage=1&total="+total+"&url="+url);
str.append("'>[首页]</a> <a href='"); str.append(url); str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url); str.append("'>[下一页]</a> <a href='"); str.append(url); str.append("?cpage=" + total + "&total=" + total+"&url="+url); str.append("'>[末页]</a>");
} else { //不是第一页,显示“[首页] [上一页] [下一页] [末页]” str.append("<a href='"); str.append(url); str.append("?cpage=1&total="+total+"&url="+url); str.append("'>[首页]</a> <a href='"); str.append(url); str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);
str.append("'>[上一页]</a> <a href='"); str.append(url); str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url); str.append("'>[下一页]</a> <a href='"); str.append(url); str.append("?cpage=" + total + "&total=" + total+"&url="+url); str.append("'>[末页]</a>");
} } } writer.write(str.toString()); } catch (IOException ex) { Logger.getLogger(Pages.class.getName()).log(Level.SEVERE, null, ex); } return result; }}
3.服务端
服务端主要是获得请求然后转向显示的页面
DisplayAction.java
Java代码
/* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.tangs.action;
import com.opensymphony.xwork2.ActionSupport;
/**
*
* @author tangs
*/
public class DisplayAction extends ActionSupport {
private String cpage;
private String total;
private String url;
public String list() {
//Get data from server
//...
//这里没有做任何逻辑,直接跳转到了页面
return SUCCESS;
}
public String getCpage() {
return cpage;
}
public void setCpage(String cpage) {
this.cpage = cpage;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.tangs.action;import com.opensymphony.xwork2.ActionSupport;/** * * @author tangs */public class DisplayAction extends ActionSupport
{ private String cpage; private String total; private String url; public String list() { //Get data from server //... //这里没有做任何逻辑,直接跳转到了页面 return SUCCESS; } public String getCpage() { return cpage; } public void setCpage(String cpage) { this.cpage = cpage;
} public String getTotal() { return total; } public void setTotal(String total) { this.total = total; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
struts.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
<package name="tagTest" extends="struts-default">
<action name="list" class="com.tangs.action.DisplayAction">
<result name="success">/list.jsp</result>
</action>
</package>
</struts>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" ><struts> <package name="tagTest" extends="struts-default">
<action name="list" class="com.tangs.action.DisplayAction"> <result name="success">/list.jsp</result> </action> </package></struts>
4.在页面中使用标签
list.jsp
Html代码
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="tangs" uri="/WEB-INF/tangs.tld"%>
<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>List</title>
</head>
<body>
共 <s:property value="total"/> 页 第 <s:property value="cpage"/> 页<br>
<tangs:pages cpage="%{cpage}" total="%{total}" url="%{url}"/>
</body>
</html>
相关文章推荐
- 在Struts2中实现自定义分页标签
- Struts2中实现自定义分页标签
- Struts2中实现自定义分页标签
- 在Struts2中实现自定义分页标签全攻略(二)
- 在Struts2中实现自定义分页标签全攻略(一)
- struts2自定义标签,实现权限认证
- 这是我们项目中的分页代码,是用JSTL + 自定义标签文件 + JAVABEAN实现的
- struts2自定义分页标签
- JAVAEE——struts2_04:自定义拦截器、struts2标签、登陆功能和校验登陆拦截器的实现
- 自定义分页标签实现
- 2015。1.21(Session实现分页checkbox,页面设计,SpringMvc,MODEL与自定义标签)
- struts2.0实现自定义分页标签
- STRUTS2自定义分页标签及过程中的问题
- struts2 实现自定义标签
- 超简单的自定义标签封装实现的JSP分页显示功能
- struts2自定义分页标签
- JSP自定义分页标签,Struts2分页标签
- struts2自定义分页标签
- Struts2自定义标签——通过自定义标签实现权限控制
- BBS项目笔记之二:struts2标签前台实现分页的复用