定义最简单的标签
自定义标签采用Default Adapter模式(缺省适配模式)
Java代码
- //最简单的标签
- public class LangHuaTag extends TagSupport {
- private long startTime;
- private long endTime;
- public int doStartTag() throws JspException {
- startTime = System.currentTimeMillis();
- //表示定制标记里面有所包括的JSP页面
- return TagSupport.EVAL_BODY_INCLUDE;
- }
- public int doEndTag() throws JspException {
- endTime = System.currentTimeMillis();
- long elapsed = endTime – startTime;
- try {
- JspWriter out = pageContext.getOut();
- out.println(“runtime is “+ elapsed);
- } catch (IOException e) {
- e.printStackTrace();
- }
- //表示JSP页面继续运行
- return TagSupport.EVAL_PAGE;
- }
- }
- //代属性的标签
- public class DateTag extends TagSupport {
- private String pattern = “yyyy-MM-dd hh:mm:ss”;
- private Date date;
- //必须要有Set方法,因为是属性可以设值
- public void setPattern(String pattern) {
- this.pattern = pattern;
- }
- public void setDate(Date date) {
- this.date = date;
- }
- public int doEndTag() throws JspException {
- SimpleDateFormat sdf = new SimpleDateFormat(pattern);
- //如果没有就是当前时间
- if(date==null){
- date = new Date();
- }
- JspWriter out = pageContext.getOut();
- try {
- out.print(sdf.format(date));
- } catch (IOException e) {
- e.printStackTrace();
- }
- return TagSupport.EVAL_PAGE;
- }
- }
- /**
- * 循环输出
- * @author Administrator
- *
- */
- public class LoopTag extends TagSupport {
- private int times =0;
- //Set方法设值
- public void setTimes(int times) {
- this.times = times;
- }
- public int doStartTag() throws JspException {
- //表示定制标记里面有所包括的JSP页面
- return TagSupport.EVAL_BODY_INCLUDE;
- }
- public int doAfterBody() throws JspException {
- if(times>0){
- times–;
- //表示双从标签开始输入
- return TagSupport.EVAL_BODY_AGAIN;
- }
- //表示结束,忽略标签内部的内容
- return TagSupport.SKIP_BODY;
- }
- }
配置文件
Xml代码
- <?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”>
- <tlib-version>1.0</tlib-version>
- <short-name>util</short-name>
- <uri>http://langhua.com/taglib/util</uri>
- <tag>
- <name>timer</name>
- <tag-class>com.langhua.tagsupport.LangHuaTag</tag-class>
- <body-content>JSP</body-content>
- <!– JSP,empty表示能能包函内容的,scriptless,tagdependent –>
- </tag>
- <tag>
- <name>date</name>
- <tag-class>com.langhua.tagsupport.DateTag</tag-class>
- <body-content>empty</body-content>
- <!– JSP,empty表示不能包函内容的,scriptless,tagdependent –>
- <attribute>
- <!– 标签名 –>
- <name>time</name>
- <!– 是否为可选属性 –>
- <required>false</required>
- <!– 是否接受JSP表达示计算结果 –>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <name>pattern</name>
- <required>true</required>
- <rtexprvalue>false</rtexprvalue>
- </attribute>
- </tag>
- <tag>
- <name>loop</name>
- <tag-class>com.langhua.tagsupport.LoopTag</tag-class>
- <body-content>JSP</body-content>
- <!– JSP,empty表示不能包函内容的,scriptless,tagdependent –>
- <attribute>
- <!– 标签名 –>
- <name>times</name>
- <!– 是否为可选属性 –>
- <required>true</required>
- <!– 是否接受JSP表达示计算结果 –>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- </tag>
- </taglib>
JSP页面
Html代码
- <%@ taglib prefix=“util” uri=“http://langhua.com/taglib/util”%>
- <util:timer></util:timer>
- <util:loop times=“3”>
- <util:date pattern=“yyyy-MM-dd” /><br/>
- </util:loop>
- <%@ taglib prefix=“util” uri=“http://langhua.com/taglib/util”%>
- <util:timer></util:timer>
- <util:loop times=“3”>
- <util:date pattern=“yyyy-MM-dd” /><br/>
- </util:loop>
TagSupport的流程图
SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。
SKIP_PAGE 忽略标签后面的JSP内容。
EVAL_PAGE 处理标签后,继续处理JSP后面的内容。
EVAL_BODY_BUFFERED 表示需要处理标签体。
EVAL_BODY_INCLUDE 表示需要处理标签体,但绕过setBodyContent()和doInitBody()方法
EVAL_BODY_AGAIN 对标签体循环处理。
今天的文章jsp自定义标签 TagSupport分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/25812.html