(六)JSP之自定義標籤

JSP自定義標籤實現方式:html

1.使用TLD文件java

2.使用tag文件web

1、使用TLD文件less

1.建立一個標籤處理類jsp

(1)繼承TagSupport類ide

實例1 HelloWorldTag.javaui

package cn.iborder.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class HelloWorldTag extends TagSupport{
	private static final long serialVersionUID = 1L;
	@Override
	public int doStartTag() throws JspException {
		// TODO Auto-generated method stub
		JspWriter out = this.pageContext.getOut();
		try {
			out.println("自定義標籤hello world...<br/>");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return TagSupport.SKIP_BODY;
	}
}

實例2 IterateTag .javathis

package cn.iborder.tag;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class IterateTag extends TagSupport {
	private static final long serialVersionUID = 1L;
	private String var;
	private String items;
	private Iterator iter;
	
	public String getVar() {
		return var;
	}
	public void setVar(String var) {
		this.var = var;
	}
	public String getItems() {
		return items;
	}
	public void setItems(String items) {
		this.items = items;
	}
	public Iterator getIter() {
		return iter;
	}
	public void setIter(Iterator iter) {
		this.iter = iter;
	}
	@Override
	public int doStartTag() throws JspException {
		// TODO Auto-generated method stub
		Object value = this.pageContext.getAttribute(items);
		if (value != null && value instanceof List) {
			this.iter = ((List)value).iterator();
			if (iter.hasNext()) {
				this.pageContext.setAttribute(var, iter.next());
				return TagSupport.EVAL_BODY_INCLUDE; //執行標籤體
			} else {
				return TagSupport.SKIP_BODY;
			}
		} else {
			return TagSupport.SKIP_BODY;
		}
	}
	@Override
	public int doAfterBody() throws JspException {
		// TODO Auto-generated method stub
		if (iter.hasNext()) {
			this.pageContext.setAttribute(var, iter.next());
			return TagSupport.EVAL_BODY_AGAIN; //在執行一次標籤體
		} else {
			return TagSupport.SKIP_BODY;
		}
	}
}

(2)繼承SimpleTagSupport (jsp2.0).net

實例3 SimpleIteratorTag .javacode

package cn.iborder.tag;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class SimpleIteratorTag extends SimpleTagSupport {
	
	private String var;		//屬性
	private String items;	//對象
	private Iterator iter;	//保持集合中取得的值
	
	public String getVar() {
		return var;
	}	
	public void setVar(String var) {
		this.var = var;
	}	
	public String getItems() {
		return items;
	}	
	public void setItems(String items) {
		this.items = items;
	}
	
	public Iterator getIter() {
		return iter;
	}	
	public void setIter(Iterator iter) {
		this.iter = iter;
	}
	
	@Override
	public void doTag() throws JspException, IOException {
		// TODO Auto-generated method stub
		Object value = this.getJspContext().getAttribute(items);
		if(value != null && value instanceof List){
			this.iter = ((List)value).iterator();
			while(this.iter.hasNext()) {
				this.getJspContext().setAttribute(var, this.iter.next());
				this.getJspBody().invoke(null); //響應頁面
			}
		}
	}
}

2.建立標籤庫描述文件

標籤庫描述文件(Tag Library Descriptor,),簡稱 TLD, 採用XML文件格式,對標籤庫及庫中的標籤作了描述。

TLD文件中的元素能夠分爲3類:

(1) <taglib> —— 標籤庫元素

(2) <tag> —— 標籤元素

(3) <attribute> —— 標籤屬性元素

實例1 hello.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 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 web-jsptaglibrary_2_0.xsd">
	<tlib-version>1.0</tlib-version>
	<jsp-version>2.0</jsp-version>
	<short-name>HelloWorldTag</short-name>
	
	<tag>
		<name>helloWorld</name>
		<tag-class>cn.iborder.tag.HelloWorldTag</tag-class>
		<body-content>empty</body-content>
	</tag>
	<tag>
		<name>IteratorTag</name>
		<tag-class>cn.iborder.tag.IteratorTag</tag-class>
		<body-content>JSP</body-content>
		<attribute>
			<name>var</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>items</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	<tag>
		<name>SimpleIteratorTag</name>
		<tag-class>cn.iborder.tag.SimpleIteratorTag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>var</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>items</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>

3.在JSP文件中引入自定義標籤庫

實例1 HelloWorldTag.jsp

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="helloWorld" uri="/WEB-INF/hello.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>
		<helloWorld:helloWorld/>
		<p>========================================</p>
		<%
			List man = new ArrayList();
			man.add("張三");
			man.add("李四");
			man.add("王五");
			man.add("馬六");
			pageContext.setAttribute("man", man);
		%>
		<helloWorld:IteratorTag items="man" var="a">
			<h1><b><em>${a }</em></b></h1>
		</helloWorld:IteratorTag>
		<p>========================================</p>
		<%
			List woman = new ArrayList();
			woman.add("張三");
			woman.add("李四");
			woman.add("王五");
			woman.add("馬六");
			woman.add("趙七");
			pageContext.setAttribute("woman", woman);
		%>
		<helloWorld:SimpleIteratorTag items="woman" var="b">
			<strong style="font-size: 32px;color: red;"><em>${b }</em></strong>
		</helloWorld:SimpleIteratorTag>
	</body>
</html>

運行結果:

2、使用Tag文件

1.建立一個tag文件

實例1 testTag.tag

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ attribute name="var" required="true" %>
<%
	if(var == ""){
		out.println("這是一個Tag文件......");
	} else{
		out.println("這是一個Tag文件......<br>");
		out.println("屬性var的值爲 : "+var);
	}
	
%>

3.在JSP文件中引入tag文件

實例1 TestTag.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="ui" tagdir="/WEB-INF/tags" %>
<!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>TestTag</title>
	</head>
	<body>
		<p style="font-size: 32px;color: red;"><ui:testTag var="TEST"></ui:testTag></p> 
	</body>
</html>

 

更多實例: http://blog.csdn.net/yangjun2/article/details/8285172

相關文章
相關標籤/搜索