`

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

阅读更多

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

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}");
    
分享到:
评论

相关推荐

    一个封装好的分页控件

    标题中的“一个封装好的分页控件”指的是在软件开发中用于处理大量数据展示的UI组件,这种控件能够将大量的记录分割成多个小部分,每次只加载一部分数据到界面上,提高用户浏览效率和应用性能。在.NET环境中,这样的...

    两个版本Mysql和Oracle的分页标签

    分页标签通常是一个自定义标签库,可以接受页码、每页记录数等参数,并返回相应的查询结果。这种方式提高了代码的可读性和可维护性。 总的来说,MySQL和Oracle都提供了有效的分页解决方案,但它们的语法略有不同。...

    struts2.0标签库简介

    Struts2.0是Struts框架的一个重大升级版本,它在继承了Struts1.x的优良特性基础上,引入了大量的新功能和改进,特别是在标签库方面,提供了更为强大、灵活和易于使用的标签集,大大简化了Web应用的开发过程。...

    reportlab分页

    1. **PageBreak**: 在ReportLab中,`PageBreak`对象被用来插入一个新的页面。当你想要在某个特定点结束当前页面并开始新的一页时,可以使用它。例如: ```python from reportlab.pdfgen import canvas from ...

    el-table,el-form在vue中封装组件化,含操作按钮和插槽.pdf

    `searchList`应该是一个包含各种表单字段配置的对象数组,包括类型(type)、标签(label)、属性(prop)、宽度(labelWidth)等信息。根据字段类型,可以创建不同类型的输入控件,如`el-input`、`el-date-picker`...

    magento分页排序插件

    一个好的插件不仅要功能强大,还需要考虑到性能问题。这个分页排序插件可能进行了性能优化,比如使用索引提升查询速度,减少数据库负载,或者利用Ajax技术实现无刷新排序和分页,提高用户体验的同时降低了服务器压力...

    自绘制PageControl和TabControl

    - PageControl通常包含多个TabPages,每个TabPage相当于一个独立的界面。 - 分页切换:处理WM_NOTIFY消息,响应TCN_SELCHANGE通知,更新当前显示的页面。 - 自定义分页样式:调整分页按钮的外观,例如使用圆角...

    eXtremeComponents-1.0.4.zip

    eXtremeComponents 是一个功能强大的组件库,尤其以其在JSP中的extremetable标签而闻名,它提供了一种类似于displaytag的便捷方式来处理表格展示,极大地提高了开发效率和用户体验。本文将深入探讨eXtremeComponents...

    mybatis-3.2.7.zip

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    django-docs-2.2-zh-hans.zip

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

    易想最新升级包V4.0

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

    wordpress滑动图相册插件ml-slider.zip

    **WordPress滑动图相册插件ML...无论你是希望提升网站视觉吸引力,还是需要一个高效展示产品或内容的工具,ML-Slider都是一个值得信赖的选择。在实际使用中,请确保自行测试以熟悉各项设置,以充分利用这款插件的优势。

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

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

    互联网创意产品众筹平台

    │ 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 ├─众筹项目-第...

    Firefox火狐浏览器官方78.0b8-win32版本exe安装包

    同时,Firefox还支持分页浏览,允许用户在一个窗口内打开多个网页,便于多任务处理。 总的来说,Firefox 78.0b8-win32版本提供了一流的浏览体验,无论是对于普通用户还是高级用户,都是一款值得信赖的浏览器。它的...

    八股文知识点汇总-各互联网大厂java工程师面试题.pdf

    MyBatis 是一个基于 Java 的持久层框架,它简化了对数据库的操作,通过 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 2. **MyBatis...

    mybatis-3.2.2 jar包

    例如,可以创建一个PageInterceptor插件实现分页功能。 6. **事务管理**:MyBatis支持手动和自动事务管理。在Spring集成中,通常会使用Spring的事务管理,但在简单的应用中,MyBatis也可以独立处理事务。 7. **...

    MFC Tab标签页控件 CTabSheet

    在MFC中,`CTabSheet`类是用于实现Tab控件的一个关键组件,它允许你在同一个窗口内创建多个分页,每个分页可以展示不同的内容。`CTabSheet`是`CPropertySheet`类的一部分,常用于创建多页对话框式的应用程序。 标题...

    jsp入门教程

    - **Redirect**:客户端重定向,相当于新发起一个请求。 - **Forward和Redirect的问题**:比较两者的优缺点,选择合适的跳转方式。 #### 第4章 四个作用域 - **作用域概念**:介绍PageScope、RequestScope、...

Global site tag (gtag.js) - Google Analytics