JSP自定义标签的实现

JSP自定义标签分为TAG和BODYTAG两种类型,即简单标签和正文标签。

一· 简单标签和正文标签的区别

      正文标签用来处理处理标签开始和结束之间的内容。简单标签则不能够处理正文部分。但是简单标签仍然包含正文部分,只是不能操作正文部分而已。

二·自定义标签处理类的实现

     自定义标签的handle类必须实现BODYTAG标签接口,简单标签可以实现TAG接口。或者将TagSupport类和BodyTagSupport作为基类。

     JSP在解析标签时遇到开始标签时调用标签处理类的doStartTag方法,遇到结束标签时调用标签处理类的doEndTag方法。

还有其他一些方法用来在处理自定义标签

简单  doStartTag, doEndTag, release
属性  doStartTag, doEndTag, set/getAttribute1...N, release
正文、判断且无交互  doStartTag, doEndTag, release
正文、迭代判断  doStartTag, doAfterBody, doEndTag, release
正文、交互  doStartTag, doEndTag, release, doInitBody, doAfterBody, release

 

三自定义标签描述文件(tld)文件的写法

在项目的WEB-INF目录下提供标签的描述(tld)文件

描述文件描述包括以下属性

tlib-version  标签库的版本
jsp-version  这个标签库要求的JSP规范版本
short-name  JSP页面编写工具可以用来创建助记名的可选名字
uri  唯一标识该标签库的的URI
display-name  将由工具显示的可选名
small-icon  将由工具使用的可选小图标
large-icon  可被工具使用的可选大图标
description  可选的标签特定信息
listener 标签库制定的监听器

tag  用来绑定标签处理类进行绑定

 

tag元素
库中的每一个标签都由给出其名字和其标签handler的类、在由标签创建的脚本变量上的信息以及标签属性上的信息描述。脚本变量信息可以在TLD中直接给出,也可以通过tag extra info类给出(见定义脚本变量的标签)。每一个属性声明包含指明属性是否是必需的、其值是否可以由请求时表达式确定以及属性类型的内容(见属性元素)。

元素 说明
name  唯一标签名
tag-class  标签handler类路径及名称
tei-class  javax.servlet.jsp.tagext.TagExtraInfo的可选子类。见提供有关脚本变量的信息。

body-content  正文内容类型。见body-conten元素和 body-content元素。
display-name  由工具显示的可选名
small-icon  可以由工具使用的小图标
large-icon  可以由工具使用的大图标
description  可选的标签特定的信息
variable  可选的脚本变量信息。见提供有关脚本变量的信息。
attribute  标签属性信息。绑定标签处理类的属性,需提供属性的访问方法setter/getter

 

四· 在页面制定引用的自定义标签

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

 

五使用自定义标签的例子

1·TLD文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
   <tlib-version>1.0</tlib-version>
   <jsp-version>1.2</jsp-version>
   <short-name>mytag</short-name>
   <tag>
       <name>mytag</name>
       <tag-class>tag.MyTag</tag-class>
       <attribute>
       <name>id</name>
       <type>java.lang.String</type>
       </attribute>
   </tag>
</taglib>

 

2· 标签处理类MyTag

package tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class MyTag extends TagSupport{
   private String id = "0";

 public int doEndTag() throws JspException {
  return EVAL_PAGE;
 }

 public int doStartTag() throws JspException {
  int i = 0;
  
  if(i == 1){
   return SKIP_BODY;
  }
  JspWriter out=pageContext.getOut();  
      try{ 
          out.println(id); //页面中显示的内容  
         } catch (IOException e) {  
           throw new JspException(e);  
         }  

  return EVAL_BODY_INCLUDE;
 }

 public String getId() {
  return id;
 }

 public void setId(String id) {
  this.id = id;
 }

}

3·页面

<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>  
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="/WEB-INF/mytag.tld" prefix="mytag" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<f:view>
<h:form>
  <div align="center">
    <table width="306" height="176" border="1">
      <tr align="center">
        <td colspan="2"> 用户登录</td>
      </tr>
      <tr>
        <td width="64">用户名:</td>
        <td width="226"><h:inputText id="username" value="#{userbean.username}" required="true"></h:inputText><h:message for="username" ></h:message></td>
      </tr>
      <tr>
        <td>密码:</td>
        <td><h:inputSecret id="password" value="#{userbean.password}"></h:inputSecret></td>
      </tr>
      <tr>
        <td>验证码:</td>
        <td>
           <h:inputText id="validateencode" value="#{userbean.validateencoding}"/>
           <h:graphicImage value="http://192.168.2.52:8080/TestValidateCoding/servlet/ValidateEncoding" width='55' height='20'></h:graphicImage>
        </td>
       
      </tr>
      <tr align="center">
        <td colspan="2"><h:commandButton type="submit" value="登陆" action = "#{userbean.login}"></h:commandButton>&nbsp;&nbsp;
        <h:outputLink value="/JSFTest/jsp/regist/regist.faces">
        <h:outputText value="注册"></h:outputText>
        </h:outputLink>
       </td>
      </tr>
      </table>
  </div>
  <h:messages globalOnly="true" ></h:messages>
  <mytag:mytag id = "10">
  HELLOWORLD!
  </mytag:mytag>
</h:form>
</f:view>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道化简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值