一个相当好的自定义标签---分页(一)

发现在系统中有好多写得很好的代码,也不知道是哪位前辈留下来的.整理一下...
自定义分页标签库

1:在配置文件中配置

<!--  self Tag Library Descriptors  -->
  
< taglib >
    
< taglib-uri > /WEB-INF/self-html.tld </ taglib-uri >
    
< taglib-location > /WEB-INF/self-html.tld </ taglib-location >
  
</ taglib >


2:在self-html.tld中page标签的配置

< tag >
        
< name > page </ name >
        
< tagclass > com.jbbis.netedu.common.util.taglib.PageTag </ tagclass >
        
< bodycontent > empty </ bodycontent >
        
< info > tag here </ info >
        
< attribute >
        
< name > name </ name >
        
< required > true </ required >
        
< rtexprvalue > false </ rtexprvalue >
        
</ attribute >     
        
< attribute >
        
< name > pageNum </ name >
        
< required > false </ required >
        
< rtexprvalue > false </ rtexprvalue >
        
</ attribute >         
        
< attribute >
        
< name > method </ name >
        
< required > false </ required >
        
< rtexprvalue > false </ rtexprvalue >
        
</ attribute >     
        
< attribute >
        
< name > methodValue </ name >
        
< required > false </ required >
        
< rtexprvalue > true </ rtexprvalue >
        
</ attribute >     
        
< attribute >
        
< name > form </ name >
        
< required > true </ required >
        
< rtexprvalue > false </ rtexprvalue >
        
</ attribute >         
        
< attribute >
        
< name > action </ name >
        
< required > flase </ required >
        
< rtexprvalue > true </ rtexprvalue >
        
</ attribute >
        
< attribute >
        
< name > returnLevel </ name >
        
< required > flase </ required >
        
< rtexprvalue > true </ rtexprvalue >
        
</ attribute >                                     
    
</ tag >


其实从这儿也可以看到在PageTag文件中是一些什么值了...

3:PageTag中的具体操作(精华全部在这儿啦)

/**/ /*
 * Created on 2004-6-25
 *
 
*/

package  com.jbbis.netedu.common.util.taglib;

import  java.io.IOException;

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

import  com.jbbis.netedu.common.page.NullPage;
import  com.jbbis.netedu.common.page.Page;

/** */ /**
 * 
@author leo_deng
 *
 
*/

public   class  PageTag  extends  TagSupport  {
    

    
/**//* (non-Javadoc)
     * @see javax.servlet.jsp.tagext.Tag#doStartTag()
     
*/

    
private String name;
    
private String pageNum="pageNum";
    
private String method="method";
    
private String methodValue;
    
private String form="mainForm";
    
private String action;
    
private String returnLevel;
    
    
private final int CONST_FIRST=1;
    
private final int CONST_NEXT=2;
    
private final int CONST_PRIOR=3;
    
private final int CONST_LAST=4;
    
    
    
    
    
public int doStartTag() throws JspException {
        
// TODO Auto-generated method stub
        try{
            JspWriter out 
= pageContext.getOut() ;
            Page page
=(Page)pageContext.getRequest().getAttribute(name);
            
if(page==null)
                page
=NullPage.instance();
            out.print(getHtml(page.getPageNumber(),page.getPageCount()));
            out.print(getJs(page.getPageNumber(),page.getPageCount()));
            
//jspwriter是一个隐含对象,用于向jsp网页输出内容。输出的目标由
            
// pagecontext.getout提供
            
            
//向jsp网页上下文输出
          }
catch(IOException ioException){
            
throw new JspException(ioException.getMessage() );
          }
//catch
          return(SKIP_BODY);
    }

    
/**//*
     * <
     * <!--
     * function page_next(){
     *  form.action=""
     *     form.pageNum=""
     *     form.method.value=""
     *     form.submit;
     * 
     * }
     * function page_prior()
     * function page_first()
     * funciotn page_last()
     * 
     * //-->
     * <div class="listbox_page">
            <a class="page" ><img src="public/icon/first.gif" alt="首页" align="absmiddle" border="0" οnclick="page_first()"/></a>
            <a class="page" ><img src="public/icon/previous.gif" alt="上页" align="absmiddle" border="0" οnclick="page_first()"/></a>
            第<input class="page_number" name="pageNum" value="">    <img src="page_go.gif" class="page_go">页
            <a class="page" ><img src="public/icon/next.gif" alt="下页" align="absmiddle" border="0"/ οnclick="page_next()"></a>
            <a class="page" ><img src="public/icon/last.gif" alt="末页" align="absmiddle" border="0"/ οnclick="page_prior()"></a>
            共 <span class="page_sum">1000</span> 页 
        </div>
     *
     * 
*/

    
private String getJs(int pageNum,int totalNum){
        StringBuffer sb
=new StringBuffer();
        sb.append(
"\n<script language=\"JavaScript\">\n<!--");
            sb.append(printFunction(
"page_first",pageNum,totalNum,CONST_FIRST));
            sb.append(printFunction(
"page_next",pageNum,totalNum,CONST_NEXT));
            sb.append(printFunction(
"page_prior",pageNum,totalNum,CONST_PRIOR));
            sb.append(printFunction(
"page_last",pageNum,totalNum,CONST_LAST));
            getGoJs(sb,pageNum,totalNum);
        sb.append(
"\n //-->\n</script>");

        
return sb.toString();
    }

    
private void getGoJs(StringBuffer sb,int pageNum,int totalNum){
        sb.append(
"function page_go(obj){\n");
        sb.append(
"var page_number=document.getElementById(\"page_number\");\n");
        sb.append(
"if( page_number.value != new Number(page_number.value))return alert(\"请输入正确的页数\");\n");
        sb.append(
"if(page_number.value<1) page_number.value=1;if(page_number.value>");
        sb.append(totalNum);
        sb.append(
")page_number.value=");
        sb.append(totalNum);
        sb.append(
";\n");
        sb.append(
"if(page_number.value!="+pageNum+")");
        sb.append(
"submitForPageNum(obj);\n");
        sb.append(
"}");
    }

    
private StringBuffer printFunction(String function,int pageNumber,int totalNumber,int pageConst){
        StringBuffer sb
=new StringBuffer();
        sb.append(
"\nfunction "+function+"(){");
        sb.append(
"\nevent.returnValue=false;");
        sb.append(printAction());
        sb.append(printMethod());
        
//sb.append("\n"+this.form+".submit();\n}");
        if(totalNumber>1){
            
switch(pageConst){
                
case CONST_FIRST:
                    
if(pageNumber>1){
                        sb.append(printPageNum(String.valueOf(
1)));
                        sb.append(
"\n submitForPageNum("+this.form+");");
                    }

                    
break;
                
case CONST_LAST:
                    
if(pageNumber<totalNumber){
                        sb.append(printPageNum(String.valueOf(totalNumber)));
                        sb.append(
"\n submitForPageNum("+this.form+");");
                    }

                    
break;
                
case CONST_PRIOR:
                    
if(pageNumber>1){
                        sb.append(printPageNum(String.valueOf(pageNumber
-1)));
                        sb.append(
"\n submitForPageNum("+this.form+");");
                    }

                    
break;                        
                
case CONST_NEXT:
                    
if(pageNumber<totalNumber){
                        sb.append(printPageNum(String.valueOf(pageNumber
+1)));
                        sb.append(
"\n submitForPageNum("+this.form+");");
                    }

                    
break;
            }

        }

        
        sb.append(
"\n}");
        
return sb;        
    }

    
/**//*
    private StringBuffer printFunction(String function,String pageNum,int pageConst){
        StringBuffer sb=new StringBuffer();
        sb.append("\nfunction "+function+"(){");
        sb.append("\nevent.returnValue=false;");
        sb.append(printAction());
        sb.append(printMethod());
        sb.append(printPageNum(pageNum));
        //sb.append("\n"+this.form+".submit();\n}");

                
                sb.append("\n submitForPageNum("+this.form+");\n}");

        
        sb.append("\n}");
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值