`

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

阅读更多

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

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" onclick="page_first()"/></a>
            <a class="page" ><img src="public/icon/previous.gif" alt="上页" align="absmiddle" border="0" onclick="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"/ onclick="page_next()"></a>
            <a class="page" ><img src="public/icon/last.gif" alt="末页" align="absmiddle" border="0"/ onclick="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}");
    
分享到:
评论

相关推荐

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());...

    django-docs-2.2-zh-hans.zip

    针对程序员: 模板 API | 自定义标签(tags)和过滤器(filters) 表单 Django 提供了一个丰富的框架来帮助创建表单和处理表单数据。 基础: 概览 | 表单 API | 内建字段 | 内建 widgets 进阶: 针对模型的表单 | 整合媒体...

    互联网创意产品众筹平台

    │ 13-zTree树形结构-Demo4-一次加载数据,避免多次数据库交互,提高效率7 M) d& `5 L5 T2 d7 R$ s │ 14-zTree树形结构-Demo5-一次加载数据,Map集合解决双层for性能问题 │ 0 D% f8 ?. j2 W( U' z, e ├─众筹项目-第...

    易想最新升级包V4.0

    YxB2B商务网是易想网络旗下的门户型B2B行业网站系统,采用先进的标签技术和静态生成技术,通过网站后台管理轻松实现网站前台多种风格和会员网站多风格,让每一个只要懂得简单网页制作常识的网友,轻松制作出精美专业...

    ExtAspNet_v2.3.2_dll

    -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());...

    Google Chrome 6.0.451.0 Dev 版(一个由Google公司开发的网页浏览器)

     Chrome中的每一个标签页都是一个沙盒(sandbox),以防止“恶意软件破坏用户系统”或“利用分页影响其他分页”。遵守最小权限原则,每个动作的权限都会被限制,仅能运算而无法写入文件和从敏感区域读取文件(如我...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    BookingE HotelCMS 预订易酒店预订网站管理系统 v2.3.rar

    一个城市少则几十家,多则几百家酒店,每家酒店的每间客房都相当于我们的一个产品。我们不需要一分钱投资,但可以无限销售。这只有酒店预订业才有的特殊待遇。 3、解决网络支付的顾虑问题 国内95%以上的酒店都支持...

    JAVA上百实例源码以及开源项目源代码

    Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...

    OElove_v3.0

    5、增加会员主页上一个、下一个标签; 6、修复后台求助分类权限无效BUG; 7、修复心理测试评论无法分页BUG; 8、后台增加消息框风格; 9、修复会员主页,择友要求,交友类型无法显示BUG; 10、后台增加内心独白审核...

    GoodProject Maven Webapp.zip

    该项目分了两个系统,一个用户登录的系统,一个管理员登录的系统,可以更好的进行管理 功能技术亮点:4,支付宝扫码支付 角色:商户 商品发码 1.商户通过自助签约平台签约扫码产品后,可以通过发码平台自助发商品...

Global site tag (gtag.js) - Google Analytics