jsp自定义标签

jsp自定义标签核心描述

1 一般继承TagSupport或者BodyTagSupport

TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否则如果需要交互就用BodyTagSupport。

交互就是标签处理类是否要读取标签体的内容和改变标签体返回的内容。

用TagSupport实现的标签,都可以用BodyTagSupport来实现,因为BodyTagSupport继承了TagSupport。

2 doStartTag(),doEndTag()

doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGE与SKIP_PAGE,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页

比如ExampleTag.java ,用来实现标签应该怎么起作用;

package tag;

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

public class ExampleTag extends TagSupport {
	
	private static final long serialVersionUID = -8118850307268336604L;
	
	@Override
	public int doStartTag() throws JspException {
		ServletRequest request = pageContext.getRequest();
		String includeFlag = request.getParameter("include");
		System.out.println(includeFlag);
		if(includeFlag != null && includeFlag.equals("true")) {
			return(EVAL_BODY_INCLUDE);
		}
		else {
			return(SKIP_BODY);
		}
	}
} 
这个标签表示接收一个参数include,当include值为true的时候显示标签之间的内容,否则不显示

include-taglib.tld,将标签类配给指定名字的标签


<?xml version="1.0" encoding="UTF-8"?>
<!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>Example</short-name>
  <tag>
    <name>Example</name>
    <tag-class>tag.ExampleTag</tag-class>
  </tag>
</taglib> 
很明显include-taglib.tld告诉了我们标签Example标签和ExampleTag.java有一腿

ExampleTag.jsp使用自定义的标签

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
 <%@taglib uri="/tld/include-taglib.tld" prefix="include" %>
<!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>
	<include:Example>
		when include equals "true",you can see me!
	</include:Example>
</body>
</html>
<%taglib uri="" prefix=""%>uri指定文件从哪里读取,prefix指定前缀,类似struts2标签

通过<include:Example></include:Example>便可以使用标签了。


部分说明文字引用于:http://blog.sina.com.cn/s/blog_9290dc000100yv6o.html


以上例子源码下载地址于此http://www.oschina.net/code/snippet_778987_18492

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