`

自定义标签的编写

阅读更多
编写处理类
package com.oa;

import com.oa.manager.AclManager;

//JSTL函数,完成权限的即时认证
public class SecurityFunction {
	
	private static AclManager aclManager;
	public static boolean method(int userId,String sn,int permission) {
		
		return aclManager.hasPermissionByResourceSn(userId, sn, permission);
	}
 //该方法不能定义为public static ,否则spring无法注入
	public void setAclManager(AclManager aclManager) {
		SecurityFunction.aclManager = aclManager;
	}
}



在web-INF下创建my.tld文件
<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">

	<display-name>JSTL functions</display-name>
	<tlib-version>1.1</tlib-version>
	<short-name>my</short-name>
	<uri>http://www.oa.com/jsp/jstl/functions</uri>

	<function>
		<name>method</name>
		<function-class>com.oa.SecurityFunction</function-class>
		<function-signature>
			boolean method(int, java.lang.String, int)
		</function-signature>
		
	</function>

</taglib>


在web.xml中配置
<jsp-config>
		<taglib>
			<taglib-uri>http://www.oa.com/jsp/jstl/functions</taglib-uri>
			<taglib-location>/WEB-INF/my.tld</taglib-location>
		</taglib>
	</jsp-config>


在jsp中导入标签
<%@ taglib prefix="my"  uri="/WEB-INF/my.tld" %>

<c:if test="${my:method(id,searchString,p)}">
   .......
</c:if>


自定义分页标签的编写
第一步:
/**
 * 
 */

package com.cmsz.rist.common.page;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.log4j.Logger;

import com.cmsz.rist.init.RistConfig;

/**
 * 分页tag,生成分页的跳转标识

 * 
 * 
 */
public class PaginatorTag extends TagSupport
{

    /**
     * Logger for this class
     */
    private static final Logger logger = Logger.getLogger(PaginatorTag.class);

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String form;// 页面的form名


    private String action;// 跳转的action URL

    private String name; // 分页器的名称

    private String scope = "request"; // 分页器所在位置page/request/session/application

    private static final Map<String, Integer> scopeMap = new HashMap<String, Integer>(); // 属性范围Map

    static
    {
        // 初始化属性范围Map
        scopeMap.put("page", PageContext.PAGE_SCOPE);
        scopeMap.put("request", PageContext.REQUEST_SCOPE);
        scopeMap.put("session", PageContext.SESSION_SCOPE);
        scopeMap.put("application", PageContext.APPLICATION_SCOPE);
    }

    public int doEndTag() throws JspTagException
    {
    	//工程路径
		String rootPath = com.cmsz.rist.common.util.SystemValue.ROOT; 
		String rootPathSp = rootPath.substring(0,rootPath.length()-1);
		String path = rootPathSp.substring(rootPathSp.lastIndexOf("\\")+1);
		
		//跳转
		//String GO = "\""+((HttpServletRequest) pageContext.getRequest()).getContextPath()+  "/images/GO.gif" + "\"";
		//String GO2 = "\""+((HttpServletRequest) pageContext.getRequest()).getContextPath()+  "/images/GO2.gif" + "\"";
		
        Paginator paginator = (Paginator) pageContext.getAttribute(name,
                        ((Integer) scopeMap.get(scope)).intValue());
        JspWriter out = pageContext.getOut();
        StringBuffer buffer = new StringBuffer(1000);
        int totalPage = paginator.getTotalPage();
        try
        {
            if (paginator.getTotalCount() > 0)
            {// 有记录

                buffer.append("<script language=\"JavaScript\">\n");
                buffer.append("<!--\n");
                buffer.append("function GotoPage(id) {\n");
                buffer.append("var pageTotal =document." + form + ".pageSize.value; \n");

                if(action.indexOf('?')>0){
                    buffer.append("document." + form + ".action='" + action+"&pageTotal='+pageTotal+'&pageNow='+"
                    		+"id"
                            + ";\n");                	
                }else{
                    buffer.append("document." + form + ".action='" + action+"?pageTotal='+pageTotal+'&pageNow='+"
                    		+"id"
                            + ";\n");                 	
                }
       
                buffer.append("if(id<=0){id=1;}\n");
                buffer.append("document." + form + ".pageIndex.value=id;\n");
                buffer.append("document." + form + ".submit();\n");
                buffer.append("}\n");
                
                buffer.append("function changePage(obj) {\n");
                buffer.append("var id = obj.value;\n");
                /*buffer.append("var ar = obj.options;\n");
                buffer.append("for(var i=0;i<ar.length;i++){\n");
                buffer.append("if(id==ar[i].value){\n");
                buffer.append("ar[i].selected=true;\n");
                buffer.append("}}\n");*/
            	
                
                if(action.indexOf('?')>0){
                    buffer.append("document." + form + ".action='" + action+"&pageTotal='+id+'&pageNow='+"
                    		+"1"
                            + ";\n");                	
                }else{
                    buffer.append("document." + form + ".action='" + action+"?pageTotal='+id+'&pageNow='+"
                    		+"1"
                            + ";\n");                 	
                }
                buffer.append("document." + form + ".pageIndex.value=1;\n");
                buffer.append("document." + form + ".submit();\n");
                buffer.append("}\n");
                
                buffer.append("function checkPage(size,page,total) {\n");
                buffer.append("if(total)");
                buffer.append("document." + form + ".action='" + action
                                + "';\n");
                buffer.append("document." + form + ".pageIndex.value=id;\n");
                buffer.append("document." + form + ".submit();\n");
                buffer.append("}\n");

                buffer.append("function checkPageSize(page,size,total){\n");
                buffer.append("var reg = /[^0-9]/;\n");
                buffer.append("if(size.match(reg) != null){\n");
                buffer.append("alert('每页记录数请输入整数');\n");
                buffer.append("document." + form + ".pageSize.focus();}\n");
                buffer.append("if(size<1){\n");
                buffer.append("document." + form + ".pageSize.value=10;}\n");
                buffer.append("if(size>300){\n");
                buffer.append("document." + form + ".pageSize.value=300;}\n");
                buffer.append("var newsize = document." + form
                                + ".pageSize.value;\n");
                buffer.append("checkPage(page,newsize,total);\n");
                buffer.append("}\n");

                buffer.append("function checkPage3(page,size,total){\n");
                buffer.append("if(!page){\n");
                buffer.append("alert('请输入跳转的页码!');\n");
                buffer.append("return false;\n");
                buffer.append("}\n");
                buffer.append("var reg = /^(([0-9]{1,})([0-9]))|([1-9]{1})$/;\n");
                buffer.append("if(!reg.exec(page)){\n");
                buffer.append("alert('跳转页数请输入大于0的整数');\n");
                //buffer.append("document." + form + ".pageIndex.focus();}\n");
                buffer.append("return false;\n");
                buffer.append("}\n");
                buffer.append("var num = total/size;  \n");
                buffer.append("var nums = Math.round(num+0.4999999);\n");
                buffer.append("if(page<1){\n");
                buffer.append("document." + form + ".pageIndex.value=1;}\n");
                buffer.append("if(page > nums){\n");
                buffer.append("document." + form + ".pageIndex.value=nums;}\n");
                buffer.append("GotoPage(page)");
                buffer.append("}\n");

                buffer.append("//-->\n");
                buffer.append("</script>\n");
                
                 buffer.append("<script language=\"JavaScript\" event=\"onkeydown\" for=\"document\">\n"); buffer.append("if(event.srcElement.name=='pageSize'){\n");
                 buffer.append("if(((event.keyCode>=48)&&(event.keyCode<=57))||((event.keyCode>=96)&&(event.keyCode<=105))||(event.keyCode==8)||(event.keyCode==46)||(event.keyCode==13)||(event.keyCode==9)){\n");
                 buffer.append("return true;\n"); buffer.append("}else{return false;}}"); buffer.append("if(event.srcElement.name=='pageIndex'){\n");
                 buffer.append("if(((event.keyCode>=48)&&(event.keyCode<=57))||((event.keyCode>=96)&&(event.keyCode<=105))||(event.keyCode==8)||(event.keyCode==46)||(event.keyCode==13)||(event.keyCode==9)){\n");
                 buffer.append("return true;\n"); buffer.append("}else{return false;}}"); buffer.append("</script>\n");
                 
                // 以上为页面跳转的JavaScript方法

                buffer.append("<table class=\"page\">\n");
                buffer.append("<tr>\n");
                buffer.append("<td width='20%'>\n");
                buffer.append("每页显示的数量&nbsp;<select  name='ps' id='ps' onchange='javascript:changePage(this)' class='w5'>");
                int size =  RistConfig.getConfig().getInt("core.setPageSize.value",10);
                if(size < 10){
                	size = 10;
        		}
       		  
                for(int i=10;i<=100;i=i+5){
                	if(i == paginator.getPageSize()){
             			buffer.append("<option value="+i+" selected>"+i+"</option>");
             		}else{           		
                    	buffer.append("<option value="+i+" >"+i+"</option>");
             		}	
                }
                /*buffer.append("<option value=\"20\">20</option>");
                buffer.append("<option value=\"30\">30</option>");
                buffer.append("<option value=\"40\">40</option>");
                buffer.append("<option value=\"50\">50</option>");
                buffer.append("<option value=\"60\">60</option>");
                buffer.append("<option value=\"70\">70</option>");
                buffer.append("<option value=\"80\">80</option>");
                buffer.append("<option value=\"90\">90</option>");
                buffer.append("<option value=\"100\">100</option>");*/
                buffer.append("</select>");
                buffer.append("</td>\n");
                buffer.append("<td  width='30%' class='info'>\n");
                buffer.append("共有<span class='orange fb'>" + totalPage + "</span>页");
                buffer.append("<span class='orange fb'>" + paginator.getTotalCount()
                                + "</span>条记录,");
                buffer.append("当前为第<span class='orange fb'>" + paginator.getPageIndex()
                                + "</span>页\n");
                buffer.append("</td>\n");
                buffer.append("<td width='35%' class='pagebuttons'>");
                if (paginator.getPageIndex() > 1)
                {// 不是第一页,显示“第一页”,“上一页”链接

                    buffer
                                    .append("<a href='javascript:GotoPage(1)' class='bt_pghome'><span>首页</span></a>");
                    buffer
                                    .append("<a class='bt_pgpre' href='javascript:GotoPage("
                                                    + (paginator.getPageIndex() - 1)
                                                    + ")'><span>上一页</span></a>");
                }
                else
                {// 是第一页,不显示“第一页”,“上一页”链接

                    buffer.append("<a disabled=\"disabled\" style=\"cursor: default\" href='javascript:;' class='bt_pghome_gray'><span>首页</span></a>");
                    buffer.append("<a disabled=\"disabled\" style=\"cursor: default\" href='javascript:;' class='bt_pgpre_gray'><span>上一页</span></a>");
                }
                if (paginator.getPageIndex() == totalPage || totalPage <= 1)
                {// 是最后页或共只有一页,不显示“下一页”,“最后页”链接

                	 buffer.append("<a disabled=\"disabled\" style=\"cursor: default\" href='javascript:;' class='bt_pgnext_gray'><span>下一页</span></a>");
                     buffer.append("<a disabled=\"disabled\" style=\"cursor: default\" href='javascript:;' class='bt_pgend_gray'><span>尾页</span></a>");
                }
                else
                {// 不是最后页且总页数大于1页,显示“下一页”,“最后页”链接

                   /* buffer
                                    .append("<a class='bt_pgnext' href='javascript:GotoPage("
                                                    + (paginator.getPageIndex() + 1)
                                                    + ")'>下一页</a>");
                    buffer
                                    .append("<a class='bt_pgend' href='javascript:GotoPage("
                                                    + totalPage
                                                    + ")'>最后页</a>");*/
                	 buffer.append("<a href='javascript:GotoPage("
                                                    + (paginator.getPageIndex() + 1)
                                                    + ")' class='bt_pgnext'><span>下一页</span></a>");
                     buffer.append("<a href='javascript:GotoPage("
                                                    + totalPage
                                                    + ")' class='bt_pgend'><span>尾页</span></a>");
                }
                buffer.append("</td>");
                buffer
                                .append("<td width='2%' align='left'><input type='hidden' size='3' name='pageSize' value='"
                                                + paginator.getPageSize()
                                                + "' onkeyup=\"value=value.replace(/^[^1-9]+|[^\\d]/g,'');\"  onblur='checkPageSize(document.all.pageIndex.value,document.all.pageSize.value,"
                                                + paginator.getTotalCount()
                                                + ")'></td>\n");

                buffer
                                .append("<td width='2%' align='left'><input type='hidden' size='4' name='pageIndex' value='"
                                                + paginator.getPageIndex()
                                                + "'onkeyup=\"value=value.replace(/^[^1-9]+|[^\\d]/g,'');\" onblur='checkPage(document.all.pageIndex.value,document.all.pageSize.value,"
                                                + paginator.getTotalCount()
                                                + ")'></td>\n");
                buffer.append("<td width='15%' class='skip'>转至&nbsp;<input name='iPagePara' id='iPagePara' class='w2'   " 
				+ "type='text' size='5' maxlength='5' >&nbsp;页");
                //buffer.append("<img onmouseover='this.src=" 
		        //+ GO2 +"' style='CURSOR:pointer' onmouseout='this.src=" 
		        //+ GO +"' height='18' alt='跳转' src="+ GO +" width='35'" 
		        //+ " onclick=\"javascript:checkPage3(document.all.iPagePara.value,"+paginator.getPageSize()+","+paginator.getTotalCount()+");\" align='absmiddle'/></td>\n");
                buffer.append("<input type='button' class='bt_pggo' onmouseover='this.className=\"bt_pggo_o\"' onmouseout='this.className=\"bt_pggo\"' ");
                buffer.append(" onclick=\"javascript:checkPage3(document.all.iPagePara.value,"+paginator.getPageSize()+","+paginator.getTotalCount()+");\" /></td>");
                buffer.append("</tr>\n");
                buffer.append("</table>\n");
            }
            else
            {// 无记录

                buffer.append("<table class=page>\n");
                buffer.append("<tr>\n");
                buffer.append("<td  width='50%'class='info'>\n");
                buffer
                                .append("共有<span class='orange fb'>0</span>页<span class='orange fb'>0</span>条记录,");
                buffer.append("当前为第<span class='orange fb'>0</span>页</a></td>");
                buffer.append("<td width='35%' class='pagebuttons'>");
                buffer.append("<a disabled=\"disabled\" style=\"cursor: default\" href='javascript:;' class='bt_pghome_gray'><span>首页</span></a>\n");
                buffer.append("<a disabled=\"disabled\" style=\"cursor: default\" href='javascript:;' class='bt_pgpre_gray'><span>上一页</span></a>\n");
                buffer.append("<a disabled=\"disabled\" style=\"cursor: default\" href='javascript:;' class='bt_pgnext_gray'><span>下一页</span></a>\n");
                buffer.append("<a disabled=\"disabled\" style=\"cursor: default\" href='javascript:;' class='bt_pgend_gray'><span>尾页</span></a>\n");
                buffer.append("</td>");
                buffer
                                .append("<td width='2%' align='left'>"
                                                + "</td>\n");

                buffer
                                .append("<td width='2%' align='left'><input type='hidden' size='4' name='pageIndex' value='"
                                                + paginator.getPageIndex()
                                                + "' onblur='checkPage(document.all.pageIndex.value,document.all.pageSize.value,"
                                                + paginator.getTotalCount()
                                                + ")'></td>\n");
               // buffer.append("<td width='15%'>转至&nbsp;<input name='iPagePara' id='iPagePara' class=\"text\"  " 
        		//		+ "type='text' size='3'>&nbsp;页");
                //        buffer.append("<img onmouseover='this.src=" 
        		//        + GO2 +"' style='CURSOR:pointer' onmouseout='this.src=" 
        		//        + GO +"' height='18' alt='跳转' src="+ GO +" width='35'" 
        		//        + " align='absmiddle'/></td>\n");
                //buffer.append("<input type='button' class='bt_pggo' onmouseover='this.className=\"bt_pggo\"' onmouseout='this.className=\"bt_pggo\"' disabled='disabled'/></td>");
                buffer.append("</tr>\n");
                buffer.append("</table><br>\n");
            }
            out.write(buffer.toString());
            out.flush();
        }
        catch (Exception e)
        {
            logger.error("生成分页html发生错误", e);
        }

        return EVAL_PAGE;
    }

    public void setForm(String form)
    {
        this.form = form;
    }

    public void setAction(String action)
    {
        HttpServletRequest request = (HttpServletRequest) pageContext
                        .getRequest();
        this.action = request.getContextPath() + action;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public void setScope(String scope)
    {
        this.scope = scope;
    }
}

第二步:
编写WEB_INF下tld目录下的paginator.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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>paginator</short-name>
  <uri>http://www.huadu-tech.com/tags-paginator</uri>
  <description>
    paginator taglib.
  </description>
 <tag>
    <name>page</name>
    <tag-class>com.cmsz.rist.common.page.PaginatorTag</tag-class>
    <body-content>JSP</body-content>
    <description>
      Iterates over a specified array of objects, showing pages of information at a time.
    </description>
    <attribute>
      <name>name</name>
      <required>true</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>scope</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>action</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>form</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>

</taglib>

第三步:
引入标签体
<%@ taglib uri="/WEB-INF/tld/paginator.tld" prefix="paginator"%>

第四步:
在jsp页面上
<div align="center">
			<paginator:page name="paginator" form="smsClientForm"
					action="/querySmsClient.do?method=querySmsClient" />
	</div>

结束!
希望对忘记了的朋友有帮助,也是为了在项目中能迅速copy 谢谢~
分享到:
评论

相关推荐

    jsp自定义标签编写的分页

    是用jsp自定义标签编写的一个非常不错的分页,扩展性非常不错,不依赖于数据库。

    自定义标签库(自己写)

    自己写的自定义标签库,实现JSTL常用的功能。

    struts2自定义标签案例详解

    编写自定义标签类。 3.在页面中使用标签。 下面以一个自定义的分页标签为例,进行说明。 其实,开发自定义标签并不需要Struts2的支持,一般情况下,只需要继承javax.servlet.jsp.tagext.BodyTagSupport类,重写...

    掌握自定义JSP标签

    想要在 JavaServer Pages (JSP) 应用程序中添加自定义标签吗?本教程将为您展示如何用这些标签编写类似于 JSP 技术自带操作 —— 如 jsp:useBean、jsp:getProperty 和 jsp:forward —— 的自定义操作。介绍如何用...

    自定义标签的tld文件

    用法还比较全面,里面的东西都做了详细的注解,比如说:怎么定义这个标签的名字,标签的属性,有什么的约束,都做了较详细的解释,上手比较容易,使用方便,但在里面定义标签的时候,尽量不要使用复制粘贴,会有很大...

    JSP自定义标签 eclipse项目

    JSP 自定义标签,初学者必备,比较简单,可以看看的,没有文档

    jsp自定义标签库注意事项

    jsp标签库的应用可以简化我们在编写页面代码量;使我们每一个人更加轻松的去编程

    Eclipse自定义标签

    资源包括自定义标签类的编写代码,配置代码,包括开发自定义标签的全过程,适合新手学习

    jsp java自定义标签 分页 当前位置 循环遍历数据

    jsp和java联合实现了自定义标签的功能,主要技术继承了TagSupport类和编写对应bodytag.tld配置文件 实现了分页功能 当前功能点所在位置 循环遍历数据

    自定义标签的使用(详细)

    简要的介绍了自定义标签的编写,配置及使用!

    FineReport中如何用JavaScript自定义地图标签

    在日常使用地图过程中,通常会遇到地图标签,提示点等显示不满足我们的需求,需要进行JavaScript代码编写。本文主要利用FineReport的示例来讲述如何用JavaScript自定义地图标签。

    JSP 自定义标签

    JSP 自定义标签 自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。 JSP标签扩展...

    掌握自定义jsp标签

    想要在 JavaServer Pages (JSP) 应用程序中添加自定义标签吗?本教程将为您展示如何用这些标签编写类似于 JSP 技术自带操作 —— 如 jsp:useBean、jsp:getProperty 和 jsp:forward —— 的自定义操作。介绍如何用...

    自定义标签

    用java编写的字体自定义标签,字体大小的设置,颜色的设置、、、

    vue中使用antv/x6编写自定义流程

    在vue中使用antv/x6和element组件,实现自定义流程的编写,使用antv/x6实现画布绘制和流程绘制,通过拖动节点到画布的方式进行节点的添加,使用element组件实现鼠标移入节点后的自定义功能,使用antv/x6自带的api和...

    JSP自定义标签入门学习

    本文为大家分享了JSP自定义标签入门学习教程,希望大家喜欢。 1.JSP自定义标签: 自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作...

    Struts2 自定义下拉框标签Tag(源码)

    自定义标签主要包括三个步骤: 1、编写java类,继承TagSupport类; 2、创建tld文件,影射标签名和标签的java类; 3、jsp页面引入tld。 博文地址:http://blog.csdn.net/itmyhome1990/article/details/50718282

    NMBottomTabBarController:用 Objective C 编写的 iOS 自定义标签栏控制器。它使用自动布局

    NMBottomTabBarController 用 Objective C 编写的可定制的 iOS 标签栏控制器。它使用自动布局。要求iOS 7.1 + 弧配置标签栏项的图片要求图标图像选中和未选中的背景图片特征使用自动布局您可以为选项卡的选定、未...

    自定义JSP分页标签

    很适用的自定义JSP分页标签,完整的源码.在实际项目中,是经常用到的...编写一个分页标签处理类;2.配置标记的tld;3.web.xml配置;4.jsp页面调用标记.顺便补充一下:分页,有真分页(读多少取多少)和假分页(全部读在分页显示)!

    JSP自定义标签基础知识学习

    如果要实现自定义标签,那么需要如下几步: 编写标签处理类 需要继承或者实现相关的类或者接口 编写标签描述文件 该文件是一个XML文件,而且必须放在网站的WEB-INF目录中 在JSP中引入标签且使用 使用taglib指令引入...

Global site tag (gtag.js) - Google Analytics