JSP第六篇【自定义标签之传统标签】(二)

简介: JSTL标签库只提供了简单的输出等功能,没有实现任何的HTML代码封装,并且某些复杂类型转换,或者逻辑处理的时候,JSTL标签库完成不了,需要自定义标签!

我们再来看一看效果:22.png

好像是没什么区别!我们再查看一下源代码,发现执行完标签后,后面的代码全都没有执行!24.jpg

  • doStartTag()方法使用的是SKIP_BODY和EVAL_BODY_INCLUDE这两个变量,判断是否执行标签体的内容。
  • doEndTag()方法使用的是SKIP_PAGE和EVAL_PAGE这两个变量,判断是否执行剩下页面的内容
  • 控制JSP页面内容重复执行和修改JSP页面内容输出后面会有!

tld文件详细说明


25.jpg

26.jpg

首先我们来看一下tld文件当前用到的内容吧

 <tlib-version>1.0</tlib-version>
    <short-name>myshortname</short-name>
    <uri>http://mycompany.com</uri>
    <tag>
        <name></name>
        <tag-class></tag-class>
        <body-content></body-content>
    </tag>
  • 我们一个一个来看:
  • shortname推荐使用prefix
  • uri就是引入这个标签库使用的uri
  • name为标签名
  • tagclass为实现类
  • bodycontent为标签体的限制,它有4个值: EMPTY【不允许有标签体】,JSP【允许有JSP代码】 ,scriptless【不允许有脚本代码(也就是<%%>),允许有EL表达式,文本,JSP行为】 , tagdepentend【标签体内的JSP代码不会被解析,直接输出文本】

TagSupport类

大部分时候我们都不需要实现Tag接口来编写自定义标签,TagSupport是Tag的一个模板类,实现了pageContext,parent的getter、setter方法以及一些其他的功能。我们要做的就是重写doStartTag()和doEndTag()方法

  • 下面我们就来简单使用一下吧:
  • 继承TagSupport类,重写doStartTag()方法,比直接实现Tag接口简洁很多!
    public class Demo1 extends TagSupport {
        @Override
        public int doStartTag() throws JspException {
            //获取到request对象
            HttpServletRequest httpServletRequest = (HttpServletRequest) pageContext.getRequest();
            String method = httpServletRequest.getMethod();
            JspWriter jspWriter = pageContext.getOut();
            try {
                jspWriter.write(method);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return 0;
        }
    }

在tld文件中描述一把

  <tag>
        <name>showMethod</name>
        <tag-class>tag.Demo1</tag-class>
        <body-content>empty</body-content>
    </tag>

效果:27.jpg

带属性的标签

上面我们编写的自定义标签都没有附带属性的,我们在使用core标签库的时候,标签一般都带有属性

其实JSTL标签库的原理就是自定义标签,把自定义标签搞明白了,对JSTL标签库的使用就有更好的理解了

  • 想要自定义标签带有属性也非常简单,只要在标签处理器类上加一个成员变量和setter、getter(),再在tld文件中描述下该属性即可!它的原理是这样的:当标签使用到属性的时候,引擎就会调用它的setter()方法
  • 下面我想要完成的功能是:使用标签的人,传入一个字符串格式就可以显示想要的格式日期
  • 编写标签处理器类,增加一个成员变量以及对应的setter、getter方法
 public class Demo1 extends TagSupport {
        //创建成员对象,对应的setter、getter方法
        private String format = null;
        @Override
        public int doStartTag() throws JspException {
            //创建日期格式化对象
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
            //格式化日期并向浏览器输出
            try {
                pageContext.getOut().write(simpleDateFormat.format(new Date()));
            } catch (IOException e) {
                e.printStackTrace();
            }
            return 0;
        }
        public String getFormat() {
            return format;
        }
        public void setFormat(String format) {
            this.format = format;
        }


目录
相关文章
|
3月前
|
Java
jsp页面中使用jstl标签报错:javax.servlet.jsp.JspTagException
jsp页面中使用jstl标签报错:javax.servlet.jsp.JspTagException
15 0
|
1月前
|
Java 数据安全/隐私保护
Jsp自定义标签(foreach,dept,select)
Jsp自定义标签(foreach,dept,select)
28 0
|
5月前
|
XML Java 数据格式
JSP自定义标签
JSP自定义标签
53 0
|
5月前
|
Java
jsp标签下
jsp标签下
27 0
|
5月前
|
XML Java 数据格式
jsp标签上
jsp标签上
26 0
|
5月前
|
Java
JSP标签(2) -----自定义foreach ,select标签,全网最详细,最完整易懂
JSP标签(2) -----自定义foreach ,select标签,全网最详细,最完整易懂
|
5月前
|
Java API
JSP标签 01 完整详细
JSP标签 01 完整详细
|
5月前
|
Java
JAVA2EE-----jsp标签(02)
JAVA2EE-----jsp标签(02)
26 0
|
1月前
|
Java
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
23 1
|
1月前
|
Java
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
19 0