1. 程式人生 > >自定義jsp標籤

自定義jsp標籤

今天在整合專案時用到了jsp自定義標籤,研究了一下。

建立jsp自定義標籤分三步

1、建立自定義標籤類,繼承TagSupport或實現Tag介面,重寫doStartTag和doEndTag方法。他們分別會在初始化標籤和標籤呼叫結束的時候執行。

<span style="font-size:14px;">public class UserInfo extends TagSupport {

	private UserInfo user;

	private String userName;
	private String email;
	private String age;

	// 建構函式
	public UserInfo() {
		// TODO Auto-generated constructor stub
		
	}

	// 標籤初始化
	@Override
	public int doStartTag() throws JspException {
		// TODO Auto-generated method stub
		JspWriter out = this.pageContext.getOut();
		try {
			if (user == null) {
				return SKIP_BODY;
			}
			out.println("<table width='500px' border='1' align='center'>");

			out.println("<tr>");

			out.println("<td width='20%'>Username:</td>");

			out.println("<td>" + user.getUserName() + "</td>");

			out.println("</tr>");

			out.println("<tr>");

			out.println("<td>Age:</td>");

			out.println("<td>" + user.getAge() + "</td>");

			out.println("</tr>");

			out.println("<tr>");

			out.println("<td>Email:</td>");

			out.println("<td>" + user.getEmail() + "</td>");

			out.println("</tr>");

			out.println("</table>");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return super.doStartTag();
	}

	// 標籤結束
	@Override
	public int doEndTag() throws JspException {
		// TODO Auto-generated method stub
		JspWriter out=pageContext.getOut();
		try {
			out.print("<script>alert('sfasfsaf');</script>");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return EVAL_PAGE;
	}

	// 釋放資源
	@Override
	public void release() {
		// TODO Auto-generated method stub
		super.release();
		this.user = null;
	}

	//set and get
	public UserInfo getUser() {

		return user;

	}

	public void setUser(UserInfo user) {

		this.user = user;

	}
</span>

2、建立標籤庫描述檔案.tld(Tag Library Description)。注意<short-name> <uri>和 <tag>下面的標籤,有特殊含義的
<span style="font-size:14px;"><?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>cc</short-name>  
  
<uri>/mytaglib</uri>  
  
<tag>  
  
    <name>showUserInfo</name>  
  
    <tag-class>com.UserInfo</tag-class>  
  
    <body-content>empty</body-content>  
  
    <attribute>  
  
        <name>user</name>  
  
         <required>false</required>  
  
         <rtexprvalue>true</rtexprvalue>  
  
    </attribute>  
  
 </tag>  
  
</taglib>  </span>

3、web.xml配置標籤路徑

 <jsp-config>  
        <taglib>  
            <taglib-uri>/mytaglib</taglib-uri>  
            <taglib-location>/WEB-INF/tags/userTag.tld</taglib-location>  
        </taglib>  
      </jsp-config>   
  
</web-app>

4、在jsp中呼叫。指令taglib宣告標籤、給bean賦初值並儲存到pageContext、使用標籤語言呼叫。

<span style="font-size:14px;"><%@page import="com.UserInfo"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>    
<%@ taglib uri="/mytaglib" prefix="cc"%>    
<!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></span>
<body>
<span style="font-size:14px;"><%
	UserInfo user=new UserInfo();
		user.setUserName("胡強");
		user.setAge("25");
		user.setEmail("[email protected]");
		pageContext.setAttribute("u", user);
%>

<cc:showUserInfo user="${u }"/>

</body>
</html></span>