jsp自定义标签

小弟是以SimpleTagSupport为例的,还可以使用TagSupport....

以我自己创建的一个例子作为介绍吧..

工程目录如下:

 

实现<tw:Hello/>

第一步:创建标签类(HelloTag

package biaoqian;

 

import javax.servlet.jsp.tagext.*;

import javax.servlet.jsp.*;

import java.io.*;

 

public class HelloTagextends SimpleTagSupport {

    //重写doTag()方法实现标签的作用

public void doTag()throws JspException, IOException {

//使用了getJspContext()方法来获取当前的JspContext对象

JspWriter out = getJspContext().getOut();

    out.println("Hello Custom Tag!");

}

}

第二步:创建tld文件(WebContent/WEB-INF/

<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>biaoqian.HelloTag</tag-class>   //标签处理类

    <body-content>empty</body-content>    

  </tag>

</taglib>

注释:

body-content标签有4个值:empty,JSP,scriptless,tagdependent:

empty:它是一个空的标签体。

JSP:是允许标签体内出现JSP脚本,也就是java代码。

scriptless:可以接受文本,EL表达式,和JSP的动作。

tagdependent:它是指在标签体的内容可以直接被写入bodyContent,由自定义标签处理类来处理,而不被JSP容器所解析。

第三步:在jsp文件中实现标签

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ taglib prefix="tw"uri="WEB-INF/custom.tld"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>

<!-- prefix的tw可以自己换成其他的 -->

   <tw:Hello/> 

</body>

</html>

第四步:显示结果

Hello Custom Tag!

 

上面是没有使用到标签体的,要使用标签体的话,如下:

实现:

<tw:Hello>

   This is message body

</tw:Hello>

第一步:将HelloTag类中的doTag方法改为:

StringWriter sw = new StringWriter();

   public void doTag()

      throws JspException, IOException

    {

       getJspBody().invoke(sw);

       getJspContext().getOut().println(sw.toString());

}

注释:

getJspBody();//获得标签容器  invoke()显示标签体。

获得pageContext对象:(PageContext)getJspContext();

获得request对象:pageContext.getRequest();

第二步:将tld文件中tag标签下的<body-content>属性改为scriptless

第三步:在jsp文件中使用该标签的时候改为:

<tw:Hello>

        This is message body

</tw:Hello>

第四步:输出:This is message body

 

使用标签属性显示内容:

实现:

<ex:Hello message="This is custom tag" />

第一步:将HelloTag类的内容改为:

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());

       }

   }

}

第二步:将tld文件中的tag下加上:

<attribute>

       <name>message</name>

 </attribute>

第三步:将jsp文件改为<tw:Hello message="This is custom tag" />

第四步:输出  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、付费专栏及课程。

余额充值