自定义jsp标签

 
 

这里只是自定义了一个没有不处理标签体的简单标签。jsp中的标签都是对应一个标签类。

首先继承TagSupport类,这个类实现了Tag接口和IterationTag接口,基本属于Adapter模式的设计。

TagSupport类提供了doStartTag(),doEndTag(),第一个是遇到标签体执行,后面一个是标签体结束执行。

public class BlogTag extends TagSupport{
	/**
	 *自定义一个简单标签,继承TagSupport类
	 */
	//声明两个变量,用于标签接收的属性
	private Timestamp date;
	private String formatstr;
	private static final long serialVersionUID = 1L;
	@Override
	//doStartTag方法在遇到标签体的时候执行,返回值决定是否执行本身标签体和后面的jsp内容
	public int doStartTag() throws JspException {
		//设置一个request域变量
		pageContext.getRequest().setAttribute(formatstr,DateFormat.getInstance().format(date));
		//返回变量决定标签体执行步骤。
		return Tag.EVAL_BODY_INCLUDE;
	}
	///设置要提供set方法,不然标签体不能设置属性。
	public void setDate(Timestamp date) throws JspException  
    { 
		this.date=date;
    } 
	public void setFormatstr(String formatstr)
	{
		this.formatstr=formatstr;
	}
}
doStartTag()方法返回值有, EVAL_BODY_INCLUDE与SKIP_BODY,前者是显示标签体中的内容,后者是跳过标签中的内容。

doEndTag(0方法返回值有 EVAL_PAGE与SKIP_PAGE,第一个是继续执行余下的jsp页面,后者是跳过余下的jsp页面。

定义了一个标签类以后,还要进行tld文件配置和在web.xml中引用。


tld文件

<?xml version="1.0" encoding="UTF-8" ?>
<!--标签配置信息包含在taglib中-->
<taglib 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"
    version="2.0">
    
  <description>JSTL 1.1 core blog</description><!--标签体描述 -->
  <display-name>blogformat</display-name><!--标签体默认名称-->
  <tlib-version>1.1</tlib-version><!--版本号-->
  <short-name>f</short-name><!--短名称,用来在jsp页面中引用标签的简写-->
  <!-- 自定义一个uti -->
  <uri>http://blog</uri>
  <!--标签体-->
	<tag>
		<description>
			format java.sql.Timestamp to loacl
		</description>
		<name>format</name><!--标签名称-->
		<tag-class>org.blog.server.tag.BlogTag
		</tag-class><!--标签对应的处理类-->
		<body-content>JSP</body-content><!--标签体内容,通常有设置empty或jsp-->
		<attribute><!--标签属性,可以有多个-->
			<description>
				java.sql.Timestamp object
			</description>
			<name>date</name><!--属性名称 -->
			<required>false</required><!--值表示属性是否是必须,true表示是必须属性-->
			<rtexprvalue>true</rtexprvalue><!--该参数表示属性是否可以使用el表达式获取-->
			<type>java.sql.Timestamp</type><!--定义参数的类型-->
		</attribute>
		
		<attribute><!--属性2-->
			<description>
				format string
			</description>
			<name>formatstr</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<type>String</type>
		</attribute>
	</tag>
</taglib> 

web.xml中定义

<jsp-config>
		<taglib>
			<taglib-uri>http://blog</taglib-uri><!-- 标签库uri,用来引用声明 -->
			<taglib-location>/WEB-INF/blogtlds/blogtag.tld</taglib-location><!--标签库tld文件实际地址 -->
		</taglib>
	</jsp-config>


你可能感兴趣的:(自定义jsp标签)