jsp 自定义分页标签

花了一上午简单研究了下自定义标签。就弄了个自定义的分页标签。代码没有怎么仔细优化。先贴上来,:)

1,标签的实现类NumenTag.java

 

import  java.util.ArrayList;
import  java.util.HashMap;
import  java.util.List;
import  java.util.Map;

import  javax.servlet.jsp.JspException;
import  javax.servlet.jsp.JspWriter;
import  javax.servlet.jsp.tagext.TagSupport;

/**
 * 自定义的分页标签
 * 
 * 
@author 马万林
 * 
 
*/

public   class  NumenTag  extends  TagSupport  {

    
private String url = null;

    
private Result result;

    
private String page = null;

    
private String[] p;

    
private Map kv = new HashMap();

    
private List key = null;

    
/**
     * 分离参数
     * 
@param params
     
*/

    
public void setParams(String params) {
        key 
= new ArrayList();
        p 
= params.split(";");
        
for (int i = 0; p.length>1&&< p.length; i++{
            kv.put(p[i].split(
":")[0], p[i].split(":")[1]);
            key.add(p[i].split(
":")[0]);
        }

    }


    
/**
     * 分页的结果
     * 
@param result
     
*/

    
public void setResult(String result) {
        
this.result = (Result) pageContext.getRequest().getAttribute("result");
        
this.page = (String) pageContext.getRequest().getAttribute("page");
    }


    
public void setUrl(String url) {
        
this.url = url;
    }


    
public int doStartTag() throws JspException {
        StringBuffer sb 
= null;
        
if (result != null && result.getContent() != null
                
&& result.getContent().size() > 0{
            sb 
= new StringBuffer("分页: ");
            
if (result.getPage().getHasPrePage()){
                sb.append(
"").append(url);
                
if (url.indexOf("?"== -1)
                    sb.append(
"?page=1");
                
else
                    sb.append(
"&page=1");
                linkParams(sb);
                sb.append(
"'>").append("首页").append("").append(" | ");
                sb.append(
"").append(url);
                
if (url.indexOf("?"== -1)
                    sb.append(
"?page=").append(
                            result.getPage().getPreviousPage());
                
else
                    sb.append(
"&page=").append(
                            result.getPage().getPreviousPage());
                linkParams(sb);
                sb.append(
"'>").append("上页").append("").append(" | ");
            }

            
if (result.getPage().getHasNextPage()) {
                sb.append(
"").append(url);
                
if (url.indexOf("?"== -1)
                    sb.append(
"?page=").append(result.getPage().getNextPage());
                
else
                    sb.append(
"&page=").append(result.getPage().getNextPage());
                linkParams(sb);
                sb.append(
"'>").append("下页").append("").append(" | ");
                sb.append(
"").append(url);
                
if (url.indexOf("?"== -1)
                    sb.append(
"?page=").append(result.getPage().getTotalPage());
                
else
                    sb.append(
"&page=").append(result.getPage().getTotalPage());
                linkParams(sb);
                sb.append(
"'>").append("尾页").append("");
            }

            sb
                    .append(
" 跳转到:");
            
int s = result.getPage().getTotalCount();
            
for (int i = 1; i <= s; i++{
                sb.append(
"").append(i);
                
if (Integer.parseInt(page) == i)
                    sb.append(
" selected");
                sb.append(
">第").append(i).append("");
            }

            sb.append(
"");
            sb.append(
"");
            sb.append(
"function goPage(page){").append("window.location='")
                    .append(url);
            
if (url.indexOf("?"== -1)
                sb.append(
"?page='+").append("page");
            
else
                sb.append(
"&page='+").append("page");
            sb.append(
"+'");
            linkParams(sb);
            sb.append(
"';");
            sb.append(
"}");
            sb.append(
"");
        }

        
try {
            
if (sb != null{
                JspWriter out 
= pageContext.getOut();
                out.print(sb);
            }

        }
 catch (Exception e) {
            
throw new JspException(e);
        }

        
return EVAL_PAGE;
    }

    
    
/**
     * 链接参数处理
     * 
@param sb
     
*/

    
private void linkParams(StringBuffer sb) {
        
for (int i = 0; i < key.size(); i++{
            sb.append(
"&").append(key.get(i)).append("=").append(
                    kv.get(key.get(i)));
        }

    }


}

 

2,标签定义文件numentag.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 > 1.0 tlib-version >
    
< jsp-version > 1.2 jsp-version >
    
< short-name > numen short-name >
    

    
< tag >
        
< name > out name >
        
< tag-class > cn.cityyouth.util.NumenTag tag-class >
        
< body-content > empty body-content >
        
< attribute >
            
< name > url name >
            
< required > true required >
            
< rtexprvalue > true rtexprvalue >
        
attribute >
        
< attribute >
            
< name > result name >
            
< required > true required >
            
< rtexprvalue > true rtexprvalue >
        
attribute >
        
< attribute >
            
< name > params name >
            
< required > false required >
            
< rtexprvalue > true rtexprvalue >
        
attribute >
    
tag >
taglib >

 

3.js

< %@ page  contentType ="text/html; charset=utf-8" % >
< %@ include  file ="/common/taglibs.jsp" % >
< %@ taglib   uri ="/WEB-INF/numentag.tld"   prefix ="n" % >
< html >
< head >
head >
< body >
< table >
< tr >< td >
< n:out  url ="test.do"  result ="result"  params ="${type}" />
td > tr >
table >
body >
html >

你可能感兴趣的:(jsp 自定义分页标签)