`
adaqian
  • 浏览: 30293 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

struts2自定义分页标签

阅读更多
显示效果:

包含3个文件:
1.PageTag.java
package com.adaq.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;

/** 自定义分页标签
 * @author Ada
 */
public class PageTag extends ComponentTagSupport {   
    
    //private static final long serialVersionUID = 7242423813230124088L;   
    //这里传递的参数需要用字符串的形式   
    private String pageNo; //当前页数  
    private String total; //总记录数 
    private String pagesize;//每页显示个数
    private String pagecount;//页数
    private String pageaction;   
  
    public void setPageNo(String pageNo) {   
        this.pageNo = pageNo;   
    }   
  
    public void setTotal(String total) {   
        this.total = total;   
    }     
  
    @Override  
    public Component getBean(ValueStack arg0, HttpServletRequest arg1,   
            HttpServletResponse arg2) {   
        return new Pages(arg0);   
    }   
  
    protected void populateParams() {   
        super.populateParams();   
  
        Pages pages = (Pages) component;   
        pages.setPageNo(pageNo);      
        pages.setTotal(total);   
        pages.setPagecount(pagecount);
        pages.setPagesize(pagesize);
        pages.setPageaction(pageaction);
  
    }

	public String getPagesize() {
		return pagesize;
	}

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

	public String getPagecount() {
		return pagecount;
	}

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

	public String getPageaction() {
		return pageaction;
	}

	public void setPageaction(String pageaction) {
		this.pageaction = pageaction;
	}   
}  

2.Pages.java
package com.adaq.tag;

import java.io.IOException;
import java.io.Writer;
import java.util.Map;

import org.apache.struts2.StrutsStatics;
import org.apache.struts2.components.Component;
import org.apache.struts2.dispatcher.StrutsRequestWrapper;

import com.opensymphony.xwork2.util.ValueStack;

/** 自定义分页标签
 * @author Ada
 */
public class Pages extends Component {   
	  
	private String pageNo; //当前页数  
    private String total; //总记录数 
    private String pagesize;//每页显示个数
    private String pagecount;//页数  
    private String pageaction;    
  
     
  
    public String getPageaction() {
		return pageaction;
	}

	public void setPageaction(String pageaction) {
		this.pageaction = pageaction;
	}

	public String getPageNo() {   
        return pageNo;   
    }   
  
    public void setPageNo(String pageNo) {   
        this.pageNo = pageNo;   
    }   
  
    public String getTotal() {   
        return total;   
    }   
  
    public void setTotal(String total) {   
        this.total = total;   
    }   
  
    public Pages(ValueStack arg0) {   
        super(arg0);   
    }   
  
    @Override  
    public boolean start(Writer writer) {   
  
        boolean result = super.start(writer);   
        StringBuilder str = new StringBuilder();   
        Map<String, Object> cont = stack.getContext();   
        StrutsRequestWrapper req = (StrutsRequestWrapper) cont   
                .get(StrutsStatics.HTTP_REQUEST);   
 
        // 从ValueStack中取出数值   
        Object obj = stack.findValue(pageNo);   
        pageNo = String.valueOf(obj);   
        obj = stack.findValue(total);   
        total = String.valueOf(obj);  
        obj = stack.findValue(pagesize);   
        pagesize = String.valueOf(obj);  
        obj = stack.findValue(pagecount);   
        pagecount = String.valueOf(obj);  
        
        //用于计算的当前页整数形式   
        int cpageInt = Integer.valueOf(pageNo);   
        str.append("<div class='pagination'>");   
        Integer totalInt = Integer.valueOf(total);
        Integer pagesizeInt = Integer.valueOf(pagesize);
        Integer pagecountInt = Integer.valueOf(pagecount);
  
        //分页状态显示
        if(totalInt==0){
        	str.append("<span class='current'>共" +totalInt+
            		"条记录 每页显示" +pagesize+
            		"条 共" +pagecount+
            		"页 </span> ");
        }else{
        	str.append("<span class='current'>共" +totalInt+
            		"条记录 每页显示" +pagesize+
            		"条 第" +cpageInt+
            		"页/共" +pagecount+
            		"页 </span> ");
        }
        if(totalInt == 1 || totalInt == 0){
        	str.append("<span class='disabled'>首页 上一页 下一页 末页</span>");
        }else{ 
        	if(cpageInt==1){
        		str.append("<span class='disabled'>首页 上一页 </span>");
        	}else{
        		 str.append("<a href='");   
                 str.append(pageaction);  
                 str.append("?page.curpage=1"); 
                 str.append("'>首页</a> ");
                 str.append("<a href='");   
                 str.append(pageaction);   
                 str.append("?page.curpage=");   
                 str.append(cpageInt - 1);   
                 str.append("'>上一页</a> "); 
        	}
        	if(cpageInt==pagecountInt){
        		str.append("<span class='disabled'>下一页 末页</span>");
        	}else{
        		 str.append("<a href='");   
                 str.append(pageaction);   
                 str.append("?page.curpage=");
                 str.append(cpageInt + 1);
                 str.append("'>下一页</a> ");
                 str.append("<a href='");   
                 str.append(pageaction);   
                 str.append("?page.curpage=");   
                 str.append(pagecountInt);   
                 str.append("'>末页</a>"); 
        	}
        }   
  
        str.append("</div>");   
  
        try {   
            writer.write(str.toString());   
        } catch (IOException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        }   
  
        return result;   
    }

	public String getPagesize() {
		return pagesize;
	}

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

	public String getPagecount() {
		return pagecount;
	}

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

3.page.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>2.2.3</tlib-version>        
    <jsp-version>1.2</jsp-version>        
    <short-name>p</short-name>        
    <uri>/p</uri>        
    <display-name>"pages Tags"</display-name>        
             
        <tag>        
            <name>pages</name>        
            <tag-class>com.adaq.tag.PageTag</tag-class>         
            <body-content>empty</body-content>        
            <attribute>         
                <name>pageNo</name>        
                <required>true</required>        
                <rtexprvalue>true</rtexprvalue>        
            </attribute>        
            <attribute>        
                <name>total</name>        
                <required>true</required>        
                <rtexprvalue>true</rtexprvalue>        
            </attribute>
            <attribute>        
                <name>pagesize</name>        
                <required>true</required>        
                <rtexprvalue>true</rtexprvalue>        
            </attribute> 
            <attribute>        
                <name>pagecount</name>        
                <required>true</required>        
                <rtexprvalue>true</rtexprvalue>        
            </attribute>   
            <attribute>        
                <name>pageaction</name>        
                <required>true</required>        
                <rtexprvalue>true</rtexprvalue>        
            </attribute>  
        </tag>        
</taglib> 


调用例子:
<%@ taglib prefix="p" uri="/WEB-INF/page.tld"%>
...
<p:pages pageNo="page.curpage" pagesize="page.pagesize" 	 pagecount="page.pagecount" total="page.sumcount"  pageaction="flowAction!page"/>

其中:
pageNo:当前页数
pagesize:每页显示记录数
pagecount:总页数
total:总记录数
pageaction:分页查询action

注:
可结合hibernate做分页查询,见http://adaqian.iteye.com/blog/707549
  • 大小: 6.1 KB
分享到:
评论
1 楼 heliang0915 2013-12-18  
有相应的工程吗?可不可以上传一份 分享

相关推荐

    Struts2自定义分页标签

    本资源详细介绍了如何在Struts2中自定义分页标签,使得开发过程更加便捷。 在Struts2中,分页通常涉及到以下几个关键步骤: 1. **创建Action类**:首先,你需要创建一个Action类,该类将处理用户的请求,包括获取...

    基于struts2 自定义标签 分页

    在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...

    struts2自定义标签案例详解

    例如,在示例中创建了一个名为`tangs.tld`的文件,其中包含了对自定义分页标签`pages`的定义。TLD文件遵循JSP Tag Library 1.2的DTD规范,使得Web服务器可以解析并理解自定义标签的结构。 ```xml &lt;!-- tangs.tld --...

    Struts 2 自定义标签分页

    8. **页面展示**:最后,在JSP页面中,我们可以使用Struts 2的内置标签结合自定义分页标签来展示数据和分页控件。 总结一下,实现Struts 2 自定义标签分页需要对Struts 2框架有深入理解,包括标签库的创建、Java类...

    Struts2中实现自定义分页标签 --功能扩充

    本篇文章将探讨如何在Struts2中实现自定义分页标签,这是一项非常实用的功能,尤其对于处理大量数据展示时,能显著提高用户体验。我们将深入源码,了解其工作原理,并提供一个自定义分页标签的实现过程。 首先,...

    自定义分页标签源代码

    开发者可能结合Struts1标签库与自定义分页标签一起使用,实现更复杂的业务逻辑。 4. **实例化分页类**: 分页标签可能需要一个分页类的实例,这个类通常会包含当前页数、总页数、每页大小等属性,以及相关的计算...

    Struts2分页-自定义标签-类似百度分页

    通过对`TagDemo`的分析和学习,你可以更好地理解和应用Struts2自定义标签实现分页功能。 总之,Struts2自定义标签提供了一种灵活的方式,使得开发者能够在JSP页面中方便地实现分页效果。通过自定义标签,我们可以将...

    tag struts2的自定义标签实例

    在Struts2框架中,自定义标签是扩展和优化应用功能的重要手段,它允许开发者创建符合业务逻辑且...在实际项目中,根据业务需求,可以创建各种自定义标签,例如分页标签、数据表标签等,进一步优化开发效率和用户体验。

    自定义struts2 分页标签

    本教程将详细介绍如何在Struts2中自定义分页标签。 在传统的网页开发中,分页通常通过服务器端脚本或JavaScript实现,但在Struts2框架中,我们可以创建自定义标签来完成这一任务,使得代码更加模块化和易于维护。...

    自定义分页标签struts2,spring

    本项目"自定义分页标签struts2,spring"是针对Struts2和Spring框架的一个自定义标签实现,旨在简化开发过程,提高代码的可复用性和可维护性。下面我们将详细探讨这个项目中的关键技术点。 首先,Struts2是一个非常...

    struts2自定义标签

    最后,在JSP页面中,我们可以像使用其他Struts2标签一样使用自定义的分页标签,通过属性传递参数。 ```jsp &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; ${currentPage}" total="${totalPages}" url="list....

    struts2做的分页标签

    本文将详细介绍如何在Struts2中实现分页标签,并提供一个简洁易懂的项目示例。 1. **Struts2分页概念**: 分页是将大量数据分割成若干小块,每次只加载一部分数据到页面上,使得用户可以逐页浏览,减轻服务器压力...

    Struts2+jsp自定义分页组件以及源码

    本教程主要探讨如何在Struts2框架下实现一个基于JSP的自定义分页组件,名为"zoo-paging-1.0.jar"。该组件不仅提供了分页功能,还附带了源代码和示例项目,方便开发者理解和应用。 首先,我们来理解分页的基本概念。...

    自定义标签代替Struts标签实现分页

    在Java Web开发中,Struts框架是常用的MVC框架之一...这种方式比直接使用Struts的分页标签更加灵活,但需要更多的编码工作。总的来说,自定义标签是Java Web开发中的一个重要技能,能够提升应用的可维护性和可扩展性。

    java企业项目开发中的自定义分页标签

    本项目以SSH(Struts2、Spring、Hibernate)经典框架为基础,通过自定义分页标签实现了这一功能。下面将详细介绍自定义分页标签在项目中的应用及其核心知识点。 首先,SSH框架是Java Web开发中广泛使用的三大组件。...

    Struts+Hibernate分页标签

    1. **配置Struts2分页标签**: 在Struts2的配置文件(struts.xml)中,需要声明这个自定义标签的namespace、action和result。同时,需要配置拦截器栈,确保分页相关的参数能够正确传递。 2. **编写自定义标签库**: ...

    struts2 完美实现 标签分页

    在JSP页面中,你可以这样使用自定义分页标签: ```jsp &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; &lt;!-- 显示数据 --&gt; ${yourList}" var="item"&gt; &lt;!-- 表格内容 --&gt; &lt;!-- 分页 --&gt; ${yourAction}" ...

Global site tag (gtag.js) - Google Analytics