`
adaqian
  • 浏览: 29737 次
  • 性别: 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  
有相应的工程吗?可不可以上传一份 分享

相关推荐

Global site tag (gtag.js) - Google Analytics