自定義jsp標籤
阿新 • • 發佈:2019-01-06
今天在整合專案時用到了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>