自定义标签(TagSupport )

自定义标签(TagSupport )定义最简单的标签自定义标签采用Default Adapter模式(缺省适配模式)Java代码配置文件Xml代码JSP页面Html代码TagSupport的流程图SKIP_BO

大家好,又见面了,我是你们的朋友全栈君。

定义最简单的标签    
自定义标签采用Default Adapter模式(缺省适配模式) 

Java代码

 1 //最简单的标签   2 public class LangHuaTag extends TagSupport {  3 private long startTime;  4 private long endTime;  5  6 public int doStartTag() throws JspException {  7 startTime = System.currentTimeMillis();  8 //表示定制标记里面有所包括的JSP页面   9 return TagSupport.EVAL_BODY_INCLUDE; 10  } 11 public int doEndTag() throws JspException { 12 endTime = System.currentTimeMillis(); 13 long elapsed = endTime - startTime; 14 try { 15 JspWriter out = pageContext.getOut(); 16 out.println("runtime is "+ elapsed); 17 } catch (IOException e) { 18  e.printStackTrace(); 19  } 20 //表示JSP页面继续运行  21 return TagSupport.EVAL_PAGE; 22  } 23 24  } 25 //代属性的标签  26 public class DateTag extends TagSupport { 27 private String pattern = "yyyy-MM-dd hh:mm:ss"; 28 private Date date; 29 //必须要有Set方法,因为是属性可以设值  30 public void setPattern(String pattern) { 31 this.pattern = pattern; 32  } 33 34 public void setDate(Date date) { 35 this.date = date; 36  } 37 38 public int doEndTag() throws JspException { 39 SimpleDateFormat sdf = new SimpleDateFormat(pattern); 40 //如果没有就是当前时间  41 if(date==null){ 42 date = new Date(); 43  } 44 JspWriter out = pageContext.getOut(); 45 try { 46  out.print(sdf.format(date)); 47 } catch (IOException e) { 48  e.printStackTrace(); 49  } 50 return TagSupport.EVAL_PAGE; 51  } 52  } 53 54 /** 55  * 循环输出 56  * @author Administrator 57  * 58 */ 59 public class LoopTag extends TagSupport { 60 private int times =0; 61 //Set方法设值  62 public void setTimes(int times) { 63 this.times = times; 64  } 65 66 public int doStartTag() throws JspException { 67 //表示定制标记里面有所包括的JSP页面  68 return TagSupport.EVAL_BODY_INCLUDE; 69  } 70 71 public int doAfterBody() throws JspException { 72 if(times>0){ 73 times--; 74 //表示双从标签开始输入  75 return TagSupport.EVAL_BODY_AGAIN; 76  } 77 //表示结束,忽略标签内部的内容  78 return TagSupport.SKIP_BODY; 79  } 80 81 } 

配置文件    
Xml代码

 1 <?xml version="1.0" encoding="UTF-8" ?>  2 <taglib xmlns="http://java.sun.com/xml/ns/j2ee"  3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  5 version="2.0">  6 <tlib-version>1.0</tlib-version>  7 <short-name>util</short-name>  8 <uri>http://langhua.com/taglib/util</uri>   9 <tag> 10 <name>timer</name> 11 <tag-class>com.langhua.tagsupport.LangHuaTag</tag-class> 12 <body-content>JSP</body-content> 13 <!-- JSP,empty表示能能包函内容的,scriptless,tagdependent --> 14 </tag> 15 16 <tag> 17 <name>date</name> 18 <tag-class>com.langhua.tagsupport.DateTag</tag-class> 19 <body-content>empty</body-content> 20 <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent --> 21 <attribute> 22 <!-- 标签名 --> 23 <name>time</name> 24 <!-- 是否为可选属性 --> 25 <required>false</required> 26 <!-- 是否接受JSP表达示计算结果 --> 27 <rtexprvalue>true</rtexprvalue> 28 </attribute> 29 <attribute> 30 <name>pattern</name> 31 <required>true</required> 32 <rtexprvalue>false</rtexprvalue> 33 </attribute> 34 </tag> 35 36 <tag> 37 <name>loop</name> 38 <tag-class>com.langhua.tagsupport.LoopTag</tag-class> 39 <body-content>JSP</body-content> 40 <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent --> 41 <attribute> 42 <!-- 标签名 --> 43 <name>times</name> 44 <!-- 是否为可选属性 --> 45 <required>true</required> 46 <!-- 是否接受JSP表达示计算结果 --> 47 <rtexprvalue>true</rtexprvalue> 48 </attribute> 49 </tag> 50 </taglib> 

JSP页面    
Html代码  

 1 <%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>  2  3 <util:timer></util:timer>  4 <util:loop times="3">  5 <util:date pattern="yyyy-MM-dd" /><br/>  6 </util:loop>  7  8 <%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>  9 10 <util:timer></util:timer> 11 <util:loop times="3"> 12 <util:date pattern="yyyy-MM-dd" /><br/> 13 </util:loop>

 

TagSupport的流程图

      SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。
   
    SKIP_PAGE 忽略标签后面的JSP内容。
   
  EVAL_PAGE 处理标签后,继续处理JSP后面的内容。
   
  EVAL_BODY_BUFFERED 表示需要处理标签体。
   
  EVAL_BODY_INCLUDE 表示需要处理标签体,但绕过setBodyContent()和doInitBody()方法
   
  EVAL_BODY_AGAIN 对标签体循环处理。

 

 

<span role="heading" aria-level="2">自定义标签(TagSupport )

 

上面转自http://zhuhuide2004.iteye.com/blog/555737

下面是项目中的应用。

在做权限的时候,不同角色用户看到不同的权限,比如:一个页面上的添加按钮,有的角色看的到,有的角色看不到,必须判断角色是否有这个权限。

 1 public class MenuTLD extends TagSupport {  2  3  4 private String menuStr;  5  6  @Override  7 public int doStartTag() throws JspException {  8 // TODO Auto-generated method stub  9 HttpSession session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession(); 10 List<SysMenuBean> userMenus = (List<SysMenuBean>) session.getAttribute("sysMenuBeans"); 11 for (SysMenuBean sysMenuBean : userMenus) { 12 try { 13 if(sysMenuBean.getUrl()!=null&&sysMenuBean.getUrl().contains(menuStr)) 14  { 15 16 return TagSupport.EVAL_BODY_INCLUDE; 17  } 18 } catch (Exception e) { 19 // TODO Auto-generated catch block 20 return TagSupport.SKIP_BODY; 21  } 22  } 23 return TagSupport.SKIP_BODY; 24  } 25 26 public String getMenuStr() { 27 return menuStr; 28  } 29 30 public void setMenuStr(String menuStr) { 31 this.menuStr = menuStr; 32  } 33 34 }

<span role="heading" aria-level="2">自定义标签(TagSupport )

其内容是:

<?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>menu</short-name> <uri>http://www.dsdl.com/dev/jsp/menu</uri> <description>DSDL menu 1.1 core library</description> <tag> <name>menu</name> <tag-class>com.dsdl.common.menutld.MenuTLD</tag-class> <body-content>JSP</body-content> <description>menu</description> <attribute> <name>menuStr</name> <required>false</required> <rtexprvalue>false</rtexprvalue> <type>type</type> <description>MenuId</description> </attribute> </tag> </taglib>

在页面中的应用:

<span role="heading" aria-level="2">自定义标签(TagSupport )

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/155019.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ggplot2是什么_r语言ggplot2

    ggplot2是什么_r语言ggplot2ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念。当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理。本文主要对ggplot2的可视化理念及开发套路做

  • DHCP协议详解

    DHCP协议详解文章目录什么是DHCPDHCP协议DHCP报文种类DHCP报文格式DHCP工作流程IP地址分配方式租约表工作流程服务器处理流程什么是DHCPDHCP(DynamicHostConfigurationProtocol,动态主机配置协议),前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,统一使用两个IANA分配的端口:67(服务器端),68(客户端)。DHCP通常被用于局…

  • linux 开发板 ldd,Linux ldd命令

    linux 开发板 ldd,Linux ldd命令Linux下的lld命令的主要作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。ldd是list,dynamic,dependencies的缩写,列出动态库依赖关系。可以用ldd–help或者manldd来看其用法。可以用which命令找到ldd的位置:$whichldd/usr/bin/ldd使用ldd,往往在制作自己的发行版时经常需要判断某条命…

  • webpack(2)webpack核心概念「建议收藏」

    webpack(2)webpack核心概念「建议收藏」前言本质上,webpack是一个用于现代JavaScript应用程序的静态模块打包工具。当webpack处理应用程序时,它会在内部构建一个依赖图(dependencygraph),此

  • JAVA反射机制

    JAVA反射机制

  • Trie 树内存消耗问题

    Trie 树内存消耗问题

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号