听老歌 发表于 2011-12-20 23:43

struts2的自定义分页标签


struts2的自定义分页标签








1.写分页标签的相关支持类



Java代码1.package com.lowca.activity.expand.struts;
2.
3.import javax.servlet.http.HttpServletRequest;
4.import javax.servlet.http.HttpServletResponse;
5.
6.import org.apache.struts2.components.UIBean;
7.
8.import com.opensymphony.xwork2.util.ValueStack;
9.
10.public class Pagebar extends UIBean {
11.
12.    protected String totalRecord;
13.    protected String totalPage;
14.    protected String pageNo;
15.    protected String url;
16.    protected String style;
17.
18.    public String getTotalRecord() {
19.      return totalRecord;
20.    }
21.
22.    public void setTotalRecord(String totalRecord) {
23.      this.totalRecord = totalRecord;
24.    }
25.
26.    public String getTotalPage() {
27.      return totalPage;
28.    }
29.
30.    public void setTotalPage(String totalPage) {
31.      this.totalPage = totalPage;
32.    }
33.
34.    public String getPageNo() {
35.      return pageNo;
36.    }
37.
38.    public void setPageNo(String pageNo) {
39.      this.pageNo = pageNo;
40.    }
41.
42.    public String getUrl() {
43.      return url;
44.    }
45.
46.    public void setUrl(String url) {
47.      this.url = url;
48.    }
49.
50.    public String getStyle() {
51.      return style;
52.    }
53.
54.    public void setStyle(String style) {
55.      this.style = style;
56.    }
57.
58.    public Pagebar(ValueStack stack, HttpServletRequest request,
59.            HttpServletResponse response) {
60.      super(stack, request, response);
61.    }
62.
63.    @Override
64.    protected String getDefaultTemplate() {
65.      return "pagebar_" + style.toLowerCase();
66.    }
67.
68.    @Override
69.    protected void evaluateExtraParams() {
70.      super.evaluateExtraParams();
71.      addParameter("totalRecord", findString(totalRecord));
72.      addParameter("totalPage", findString(totalPage));
73.      addParameter("pageNo", findString(pageNo));
74.      addParameter("url", findString(url));
75.      addParameter("style", style);
76.    }
77.
78.}Java代码1.package com.lowca.activity.expand.struts;
2.
3.import javax.servlet.http.HttpServletRequest;
4.import javax.servlet.http.HttpServletResponse;
5.
6.import org.apache.struts2.components.Component;
7.import org.apache.struts2.components.UIBean;
8.import org.apache.struts2.views.jsp.ui.AbstractUITag;
9.
10.import com.opensymphony.xwork2.util.ValueStack;
11.
12.public class PagebarTag extends AbstractUITag {
13.
14.    private static final long serialVersionUID = 1L;
15.    protected String totalRecord;
16.    protected String totalPage;
17.    protected String pageNo;
18.    protected String url;
19.    protected String style = "basic";
20.
21.    @Override
22.    public Component getBean(ValueStack stack, HttpServletRequest request,
23.            HttpServletResponse response) {
24.      return new Pagebar(stack, request, response);
25.    }
26.
27.    protected void populateParams() {
28.      super.populateParams();
29.      Pagebar pagebar = (Pagebar) component;
30.      pagebar.setTotalRecord(totalRecord);
31.      pagebar.setTotalPage(totalPage);
32.      pagebar.setPageNo(pageNo);
33.      pagebar.setUrl(url);
34.      pagebar.setStyle(style);
35.    }
36.
37.    public String getTotalRecord() {
38.      return totalRecord;
39.    }
40.
41.    public void setTotalRecord(String totalRecord) {
42.      this.totalRecord = totalRecord;
43.    }
44.
45.    public String getTotalPage() {
46.      return totalPage;
47.    }
48.
49.    public void setTotalPage(String totalPage) {
50.      this.totalPage = totalPage;
51.    }
52.
53.    public String getPageNo() {
54.      return pageNo;
55.    }
56.
57.    public void setPageNo(String pageNo) {
58.      this.pageNo = pageNo;
59.    }
60.
61.    public String getUrl() {
62.      return url;
63.    }
64.
65.    public void setUrl(String url) {
66.      this.url = url;
67.    }
68.
69.    public String getStyle() {
70.      return style;
71.    }
72.
73.    public void setStyle(String style) {
74.      this.style = style;
75.    }
76.
77.}2.写分页标签模板,模板放在src目录下d的“template/主题名”文件夹中。
因为我选择的struts2主题是simple,所以我把模板放在“template/simple”文件夹下面。
模板文件名是“pagebar_basic.ftl”.



Html代码1.<#-- 定义顶层变量并转换 -->
2.<#assign totalPage=parameters.totalPage?number />
3.<#assign totalRecord=parameters.totalRecord?number />
4.<#assign pageNo=parameters.pageNo?number />
5.<#assign url=parameters.url />
6.<#-- 模板逻辑 -->
7.<#if (totalRecord>0) && (totalPage>1) && (pageNo>0) && (pageNo<=totalPage)>
8.    <#--计算开始位置和结束位置-->
9.    <#if (pageNo<=5)>
10.      <#assign leftNo=1 />   
11.      <#if (totalPage<10)>
12.            <#assign rightNo=totalPage />
13.      <#else>
14.            <#assign rightNo=10 />
15.      </#if>
16.    <#elseif (pageNo>5) && (pageNo<=totalPage-5)>
17.      <#if (pageNo-4>0)>
18.            <#assign leftNo=pageNo-4 />
19.      <#else>
20.            <#assign leftNo=1 />
21.      </#if>
22.      <#if (pageNo+5<=totalPage)>
23.            <#assign rightNo=pageNo+5 />
24.      <#else>
25.            <#assign rightNo=totalPage />
26.      </#if>
27.    <#else>
28.      <#if (totalPage-10+1>0)>
29.            <#assign leftNo=totalPage-10+1 />
30.      <#else>
31.            <#assign leftNo=1 />
32.      </#if>
33.      <#assign rightNo=totalPage />
34.    </#if>
35.    <#--输出内容-->
36.    <div class="pagebar_warpper">
37.      <ul class="pagebar_ul">
38.            <li>共有<span class="pagebar_rc">${totalRecord?c}</span>条数据</li>
39.            <li class="pagebar_li">
40.                <a href="<@getURL text=url page=1 />">首页</a>
41.                <#if (pageNo-1>=1)>
42.                  <a href="<@getURL text=url page=pageNo-1 />">上一页</a>
43.                </#if>
44.                <#list leftNo..rightNo as p>   
45.                  <#if (p==pageNo)>   
46.                        <span class="pagebar_curr">${p}</span>   
47.                  <#else>   
48.                        <a href="<@getURL text=url page=p />">${p}</a>
49.                  </#if>
50.                </#list>   
51.                <#if (pageNo+1<=totalPage)>
52.                <a href="<@getURL text=url page=pageNo+1 />">下一页</a>
53.                </#if>
54.                <a href="<@getURL text=url page=totalPage />">尾页</a>
55.            </li>
56.      </ul>
57.    </div>
58.</#if>
59.
60.<#--产生动态URL的宏-->
61.<#macro getURL text page>   
62.    <#if (text?index_of("?")>0)>   
63.      <#lt/>${text?replace("?","?pageNo="+page)}<#rt/>
64.    <#else>   
65.      <#lt/>${text}?pageNo=${page}<#rt/>
66.    </#if>      
67.</#macro>3.在WEB-INFO目录下新建一个tld文件,名字叫lowca-struts.tld,tld文件内容如下



Xml代码1.<?xml version="1.0" encoding="UTF-8"?>
2.<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
3.<taglib>
4.    <tlib-version>1.0</tlib-version>
5.    <jsp-version>1.2</jsp-version>
6.    <short-name>l</short-name>
7.    <uri>/lowca-tags</uri>
8.    <display-name>自定义的struts标签</display-name>
9.      
10.    <tag>
11.      <name>pagebar</name>
12.      <tag-class>com.lowca.activity.expand.struts.PagebarTag</tag-class>
13.      <body-content>jsp</body-content>
14.      <description>分页工具条</description>
15.      <attribute>
16.            <name>totalRecord</name>
17.            <required>true</required>
18.            <rtexprvalue>true</rtexprvalue>
19.            <type>int</type>
20.            <description>记录数</description>
21.      </attribute>      
22.      <attribute>
23.            <name>totalPage</name>
24.            <required>true</required>
25.            <rtexprvalue>true</rtexprvalue>
26.            <type>int</type>
27.            <description>总页数</description>
28.      </attribute>      
29.      <attribute>
30.            <name>pageNo</name>
31.            <required>true</required>
32.            <rtexprvalue>true</rtexprvalue>
33.            <type>int</type>
34.            <description>页码</description>
35.      </attribute>      
36.      <attribute>
37.            <name>url</name>
38.            <required>true</required>
39.            <rtexprvalue>true</rtexprvalue>
40.            <type>java.lang.String</type>
41.            <description>url地址</description>
42.      </attribute>      
43.      <attribute>
44.            <name>style</name>
45.            <required>false</required>
46.            <rtexprvalue>true</rtexprvalue>
47.            <type>java.lang.String</type>
48.            <description>呈现样式</description>
49.      </attribute>
50.    </tag>
51.</taglib>4.在web.xml注册这个自定义tld



Xml代码1.<!-- 注册自定义的标签 -->
2.<jsp-config>
3.    <taglib>
4.      <taglib-uri>/lowca-tags</taglib-uri>
5.      <taglib-location>/WEB-INF/lowca-struts.tld</taglib-location>
6.    </taglib>
7.</jsp-config>5.在页面上面使用这个自定义标签



Html代码1.<%@ page language="java" pageEncoding="UTF-8"%>
2.<%@ taglib prefix="l" uri="/lowca-tags"%>
3.
4.<s:debug></s:debug>
5.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
6.<html>
7.<head>
8.    <title>测试</title>
9.</head>
10.   
11.<body>
12.    <l:pagebar pageNo="%{#parameters.pageNo}" url="test.jsp" totalPage="684" totalRecord="20498" style="basic" />
13.</body>
14.</html>至此,大功告成。

style是可以省略的属性,如果省略,则style默认值为basic。

给标签属性设置值的办法是%{ognl表达式},例如:%{#parameters.pageNo}。
pageNo当前页码,totalPage总页数,totalRecord总记录数,这些属性都必须设置成动态查询出来的,比如:%{totalPage},%{totalRecord},%{#parameters.pageNo}

你可以定义你自己的模板来扩展这个标签,模板命名规则为pagebar_${style名称}.ftl,例如:pagebar_advance.ftl。

小鬼萌萌控 发表于 2011-12-21 22:01

学习鸟 谢谢分享
页: [1]
查看完整版本: struts2的自定义分页标签