zoukankan      html  css  js  c++  java
  • 自定义jsp标签

     

     

    概述

    自定义标签需要实现SimpleTag接口,在定义标签的时候,只需要实现该接口的几个方法就可以了.

    • ` void setJspContext(JspContext pc)
      • 默认传入PageContext对象
      • 通过PageContext对象完成操作
    • void setParent(JspTag parent)
      • 如果有父标签,则执行该方法,没有的话,就不执行了
    • void setJspBody(JspFragment jspBody)
      • 把代表标签体的JspFragment对象传进来
    • void doTag()
      • 执行标签

    在调用自定义标签的时候,会默认调用者几个方法.而且执行是有顺序的,顺序就是上面这个样子.
    其中:
    JspFragment代表某个对象中的部分JSP代码,在simpleTag接口中,就是JSP标签的正文部分.
    JspFragment对象中有一个void invoke(Writer out)可以执行该片段,并将所有输出定向到给定 Writer,如果 out 为 null,则将输出定向到与该片段关联的 JspContext 的 getOut() 方法返回的 JspWriter

    没有标签主题的标签

    S1:实现一个类
    java ee提供了一个SimpleTag的实现类,在使用的时候,可以直接继承这个类,然后选择需要的方法重写就可以了.

    package userDefinedJspTag;

    import java.io.IOException;
    import javax.servlet.jsp.JspContext;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.SimpleTagSupport;

    public class TagDemo1 extends SimpleTagSupport {

    private PageContext pc;

    @Override
    public void setJspContext(JspContext pc) {
    this.pc = (PageContext) pc;
    }

    @Override
    public void doTag() throws JspException, IOException {
    pc.getOut().print("hello");
    }

    }

    S2:编辑TLD配置文件
    跟自定义el函数差不多,只是这里使用的是tag标签.

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib version="2.0" 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">

    <tlib-version>1.0</tlib-version>
    <short-name>myfn</short-name>
    <uri>http://www.thecatcher/mytag</uri>


    <!-- 配置自定义标签 -->
    <tag>
    <name>printHi</name>
    <tag-class>userDefinedJspTag.TagDemo1</tag-class>
    <body-content>empty</body-content>
    </tag>
    </taglib>

    S3:JSP文件中引入并使用

    ...
    <%@ taglib uri="http://www.thecatcher/mytag" prefix="mytag"%>
    ...
    <mytag:printHi/>

    带有标签主体的标签

    带有主体的标签,跟不带主题的标签差不多.
    doTag()方法里,声明一个JspFragment,然后invoke一下就可以了

    public void doTag() throws JspException, IOException {
    JspFragment jf = this.getJspBody();
    // jf.invoke(pc.getOut());
    //把这里写成null的话,服务器底还是会自动给丫传入一个out的.
    jf.invoke(null);
    }

    TLD的配置也有点不同,body-content这里不能再写empty了.
    body-content有四个值可选:

    • empty:空,不带主体
    • JSP:支持EL表达式,java代码等的主体
    • scriptless:不支持java代码,但是EL表达式等还是可以使用的.
    • tagdependent:不支持所有计算的模式. EL表达式中的计算不会进行解析.

    使用EL表达式,jsp标签的主要目的就是减少java代码的使用. 所以带主体的标签最常用的这个属性就是scriptless.

     <tag>
    <name>out</name>
    <tag-class>userDefinedJspTag.TagDemo2</tag-class>
    <body-content>scriptless</body-content>
    </tag>

    使用的时候也很简单,这样就可以了.
    <mytag:out>你好啊.</mytag:out>

  • 相关阅读:
    APICloud联合腾讯云推出“云主机解决方案“,各种福利等你拿
    WiFi模块Demo(新手教程)图文详解模块使用教程
    移动APP 微信支付完整过程(wxPay 方案一)
    APICloud开发者进阶之路 | txLive模块(直播类)试用分享
    解决R语言临时文件目录的问题(tempdir、tempfile)
    CentOS下SparkR安装部署:hadoop2.7.3+spark2.0.0+scale2.11.8+hive2.1.0
    Extending sparklyr to Compute Cost for K-means on YARN Cluster with Spark ML Library
    Running R jobs quickly on many machines(转)
    R语言快速深度学习进行回归预测(转)
    sparklyr包:实现Spark与R的接口
  • 原文地址:https://www.cnblogs.com/thecatcher/p/5755174.html
Copyright © 2011-2022 走看看