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(
"<a href='").append(url);
                
if (url.indexOf("?"== -1)
                    sb.append(
"?page=1");
                
else
                    sb.append(
"&page=1");
                linkParams(sb);
                sb.append(
"'>").append("首页").append("</a>").append(" | ");
                sb.append(
"<a href='").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("</a>").append(" | ");
            }

            
if (result.getPage().getHasNextPage()) {
                sb.append(
"<a href='").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("</a>").append(" | ");
                sb.append(
"<a href='").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("</a>");
            }

            sb
                    .append(
" 跳转到:<select name='goToPage' οnchange='javascript:goPage(this.value)'>");
            
int s = result.getPage().getTotalCount();
            
for (int i = 1; i <= s; i++{
                sb.append(
"<option value=").append(i);
                
if (Integer.parseInt(page) == i)
                    sb.append(
" selected");
                sb.append(
">第").append(i).append("页</option>");
            }

            sb.append(
"</select>");
            sb.append(
"<script language=javascript>");
            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(
"</script>");
        }

        
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 >
    
<!-- OutputTag -->
    
< 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 >
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值