周记(jsp自定义标签)

jsp自定义标签

1.自定义标签类

         标签类就是一个普通的类,只需要继承标签的支持类(接口)就可以,这里关于标签的支持类有如下关系图


这里可以继承BodyTagSupport,TagSupport,SimpleTagSupport等,具体继承哪个,看操作方便和实际需要。下面是一个简单demo

package com.supre.test;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class Test extends BodyTagSupport {
	
	private static final long serialVersionUID = 1L;
	private String name;
	private String value;
	private String className;
	
	@Override
	public int doEndTag() throws JspException {
		JspWriter out = pageContext.getOut();
		try {
			String div = "<div class='"+className+"'>";
			div = div + "<input type='text' value='"+value+"'/><br/>";
			div = div + "<label>name:"+name+"</label><br/>";
			div = div + "<span>className:"+className+"</span><br/>";
			div = div +"contect:" + (bodyContent!=null?bodyContent.getString():"");
			div = div + "</div>";
			out.println(div);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return super.doEndTag();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}
}

说明:其中属性name, value, className均对应自定义标签中的属性,需要提供get/set方法bodyContent为对象BodyTagSupport中的属性,是一个包含自定义标签体中间类容的对象,可以通过该对象取得自定义标签体中的内容,当然该对象也有可能为null

2.创建标签描述文件(.tld)

         标签描述文件主要是将这个标签与一个类对应起来,同时对标签的一些属性做相应现限制。该文件定义在web项目的/WEB-INF/目录下的一个.tld文件,对上面定义的标签类有如下描述文件:WEB-INF/tag/aaa.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>cc</shortname>
<uri>http://jakarta.apache.org/taglibs/struts-example-1.0</uri>
<info>tag test</info>
<tag>
<!-- 标签名 -->
	<name>test</name>
	<!-- 对应的自定义标签类的全类名 -->
	<tagclass>com.supre.test.Test</tagclass>
	<!-- 定义标签体中间支持的格式:有  empty scriptless JSP tagdependent -->
	<bodycontent>JSP</bodycontent>
	<!-- 定义标签属性 -->
	<attribute>
		<!-- 自定义标签类中的属性名字 -->
		<name>name</name>
		<!-- 设置是否为必须属性 -->
		<required>true</required>
		<!-- 设置是否支持表达式 -->
		<rtexprvalue>true</rtexprvalue>
	</attribute>
	<attribute>
		<name>value</name>
		<required>true</required>
		<rtexprvalue>true</rtexprvalue>
	</attribute>
	<attribute>
		<name>className</name>
		<required>false</required>
		<rtexprvalue>true</rtexprvalue>
	</attribute>	
</tag>
</taglib>

说明:其中 bodycontent中分别支持的格式:
empty:空标记,即起始标记和结束标记之间没有内容。
tagdependent:标签体内容直接被写入bodyContent,不被JSP容器解释处理
scriptless:接受文本、EL和JSP动作,但不支持出现代码,如:
          <cc:test> <%=request.getProtocol()%> </cc:test>
JSP:接受所有JSP语法,如定制的或内部的tag、scripts、静态HTML、脚本元素、JSP指令和动作。

3.使用自定义标签

         使用自定义标签,需要在jsp页面中先引入该标签,引入格式为:

         <%@ taglib prefix="cc"uri="/WEB-INF/tag/aaa.tld" %>

         其中 prefix为该标签的前缀(自定义),uri为上面定义的标签描述文件的相对路径

就上面自定义标签的简单使用

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="cc" uri="/WEB-INF/tag/aaa.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=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<cc:test name="admin" value="123123"></cc:test>
	<br/>
	<cc:test name="aaaaaa" value="bbbbbb" className="ccccc">
		<input type="button" value="test" />
	</cc:test>
</body>
</html>

结果截图:


参考博文:http://blog.csdn.net/lw001x/article/details/7589302



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值