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