jsp 自定义标签详解

在做项目的时候有时候一些标签并不能满足我们的需求,这个时候就要自定义标签,那下面就简单介绍一下:

        当jsp页面包含一个自定义标签时将被转化为servlet,标签转化被称为tag hander的对象操作,即当servlet执行时web container 调用那些操作,在jsp标签扩展可以让你创建新的标签并可以插入到一个jsp页面,可以引入simple tag

Handles来编写这些自定义标记。

可以继承simpleTagSupport类并重写的doTag方法来开发一个简单的自定义标签

创建”hello”标签,标签格式为:<ex:hello />

要创建自定义jsp标签,首先创建处理的java类,所以要创建一个helloTag类,如下所示:

package com.runoob;
 
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
 
public class HelloTag extends SimpleTagSupport {
 
  public void doTag() throws JspException, IOException {
    JspWriter out = getJspContext().getOut();
    out.println("Hello Custom Tag!");
  }
}

 

以下代码重新了doTag()方法,方法中使用了getJspContext()方法来获取当前的jspContext对象,并将Hello Custom Tag传递给JspWriter对象。

编译以上类,并将其复制到环境变量CLASSPATH目录中。最后创建如下标签库:<Tomcat安装目录>webapps\ROOT\WEB-INF\custom.tld。

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.runoob.HelloTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>


接下来,我们就可以在JSP文件中使用Hello标签:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello/>
  </body>
</html>


以上程序输出结果为:

Hello Custom Tag!

也可以自定义标签属性:要接受属性,值自定义标签类必须实现setter方法,javabean中setter方法如下:

package com.runoob;
 
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
 
public class HelloTag extends SimpleTagSupport {
 
 private String message;
   public void setMessage(String msg) {
      this.message = msg;
   }
   StringWriter sw = new StringWriter();
   public void doTag()
      throws JspException, IOException
    {
       if (message != null) {
          /* 从属性中使用消息 */
          JspWriter out = getJspContext().getOut();
          out.println( message );
       }
       else {
          /* 从内容体中使用消息 */
          getJspBody().invoke(sw);
          getJspContext().getOut().println(sw.toString());
       }
   }
}


属性名称是”message”所以setter方法是setMessage(),现在让我们在TLD文件中使用<attribute>元素添加此属性:

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD with Body</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.runoob.HelloTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
       <name>message</name>
    </attribute>
  </tag>
</taglib>


现在我们就可以在JSP文件中使用message属性了,如下所示:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello message="This is custom tag" />
  </body>
</html>


以上实例数据输出结果为:

This is custom tag

你还可以包含以下属性:

属性

描述

name

定义属性的名称。每个标签的是属性名称必须是唯一的。

required

指定属性是否是必须的或者可选的,如果设置为false为可选。

rtexprvalue

声明在运行表达式时,标签属性是否有效。

type

定义该属性的Java类类型 。默认指定为 String

description

描述信息

fragment

如果声明了该属性,属性值将被视为一个 JspFragment

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值