Struts2自定义分页标签

本文介绍了一个用于Struts2框架的自定义分页组件实现方式,通过自定义Struts2标签来简化分页操作,确保动态查询参数不丢失,减少开发工作量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts2自定义分页标签

Authoryongtree

 

         最近在学习Struts2,并使用Struts2开发系统。在网上看了好多的struts2的分页,虽然都实现了分页的功能,但是感觉不是非常好,需要我们在每次写分页的时候做很多的工作,而我认为分页应该是一个通用的组件,开发人员在开发的过程中不应该在分页上花费太多的精力。所以,一直想封装一个比较通用的分页组件,而设计分页组件的时候,怎样保证动态查询的参数不丢失,成为实现的一个难点。感谢tangshuoshim的分享,让我实现了这样的一个分页组件。

         该组件采用自定struts2标签的方式实现。

         首先建立一个构建分页标签信息的类:Pages.java

/**

 * 构建分页标签体的类

 * @author yongtree

 * @date 2008-11-4 下午02:52:19

 * @version 1.0

 */

public class Pages extends Component {

    private HttpServletRequest request;    

    private String pageNo;   //当前页码

    private String total;   //总页数

    private String styleClass;   //分页的样式

    private String theme;   //分页的主题

    private String url;   //action的路径

    private String urlType; //路径的类型,主要用于URL重写的扩展

      

  //省略getset方法    

      

    public Pages(ValueStack arg0, HttpServletRequest request) {  

        super(arg0);  

        this.request = request;  

    }  

 

    @Override 

    public boolean end(Writer writer,String body) {  

        boolean result = super.start(writer);  

        try {  

         //ValueStack中取出数值  

            Object obj=this.getStack().findValue(pageNo);              

            pageNo = String.valueOf((Integer)obj);    

            obj=this.getStack().findValue(total);  

            total = String.valueOf((Integer)obj);   

 

            StringBuilder str = new StringBuilder();  

            Map cont= this.getStack().getContext();  

            StrutsRequestWrapper req=(StrutsRequestWrapper)cont.get(StrutsStatics.HTTP_REQUEST);  

               if(url==null||"".equals(url)){                 

                 url=(String)req.getAttribute("javax.servlet.forward.request_uri");

               }

               String pageNoStr="?pageNo=";

               if("dir".equals(urlType)){//url的类型为目录类型时,比如http://localhost:8090/yongtree/page/1

                 pageNoStr="";

                 if("1".equals(pageNo)){//第一页时

                    if(url.lastIndexOf("/")!=url.length()-1){

                        if(url.lastIndexOf("1")==url.length()-1){//如果有页码1,则去掉1

                           url=url.substring(0, url.length()-1);

                        }else if(url.lastIndexOf("/")!=url.length()-1){//如果没有页码1,并且最后不是'/'时,加上'/'

                           url=url+"/";

                        }

                    }

                 }else{

                        url=url.substring(0, url.lastIndexOf("/")+1);

                    }

               }

              

            

             //下面这段处理主要是用来处理动态查询的参数,并拼接成url 

            StringBuffer perUrl=new StringBuffer(""); 

            if ( this.getParameters().size() != 0 ) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值