程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 自定義JSTL標簽和函數庫,jstl標簽函數庫

自定義JSTL標簽和函數庫,jstl標簽函數庫

編輯:JAVA綜合教程

自定義JSTL標簽和函數庫,jstl標簽函數庫


一、自定義JSTL標簽

1.編寫標簽處理類:

(1)實現 SimpleTag 接口,通過 setJspContext()方法可以獲取到 jspContext 對象,實際上也是 pageContext 對象。

在 doTag() 方法中完成邏輯,通過 JspWriter out = jspContext.getOut(); 獲取到的 out 對象,可以輸出到頁面。如:

/** * MyTag2 * * @author solverpeng * @create 2016-07-03-10:20 */ public class MyTag2 implements SimpleTag { private JspContext jspContext = null; @Override public void doTag() throws JspException, IOException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String dataStr = simpleDateFormat.format(new Date()); JspWriter out = jspContext.getOut(); out.write(dataStr); } @Override public void setParent(JspTag jspTag) { } @Override public JspTag getParent() { return null; } @Override public void setJspContext(JspContext jspContext) { this.jspContext = jspContext; } @Override public void setJspBody(JspFragment jspFragment) { } } MyTag2

(2)在 WEB-INF 下新建自定義 tld 文件,可以參考 JSTL 本身一些標簽的的實現,如 c.tld。然後注冊標簽。如:

<?xml version="1.0" encoding="UTF-8" ?> <taglib 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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <display-name>solverpeng core</display-name> <tlib-version>1.1</tlib-version> <short-name>solverpeng</short-name> <uri>http://solverpeng.com/tags</uri> <tag> <name>showDate</name> <tag-class>com.nucsoft.myservlet.tag.MyTag2</tag-class> <body-content>empty</body-content> </tag> </taglib> solverpeng core tag

(3)在頁面中導入自定義的標簽庫,然後使用。如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="http://solverpeng.com/tags" %> <html> <head> <title>Title</title> </head> <body> <s:showDate/> </body> </html> tag.jsp

2.繼承 SimpleTagSupport。其中在 SimpleTagSupport 類中已經完成了對 JspTag、JspContext,JspFragment 的注入操作,可以直接使用。

3.需要注意的地方

在自定義標簽tld文件中,tag 節點裡的 body-content 節點內容有四個可選值,分別介紹一下:

(1)tagdependent:將標簽體的內容不經過任何修改和處理原封不動的交個標簽處理類

(2)empty:沒有任何標簽體

(3)scriptless:表示標簽體支持純文本、EL表達式、JSTL等標簽,不支持JSP腳本片段和JSP表達式

(4)JSP:在 SimpleTag 標簽體系下不可用

 

可以通過 jspContext 獲取到其他8大 JSP 隱含對象。

 

如果為帶屬性的自定義標簽,在目標處理類中通過提供 setXxx() 方法來獲取,在 tld 文件中,需要在 tag 元素中添加子節點 attribute 。

其中對 attribute 節點下的三個子節點進行說明:

(1)name:屬性名稱,和目標處理類中通過 setXxx() 方法定義的屬性名一致

(2)required:是否是必須輸入的

(3)rtexprvalue:是否支持 EL 表達式

 

如果需要對標簽體處理,需要在目標處理類中進行一系列的處理:

(1)在 doTag() 方法中通過 this.getJspBody() 可以獲取到 JspFragment 對象

(2)執行 JspFragment 對象的 invoke() 方法,若不需要對執行後的標簽體進行處理,而是直接輸出的話,invoke() 方法的參數傳入 null就 ok。

若是需要對執行後的標簽體進行處理,則需要傳入一個 Write 對象,在調用 invoke() 方法之後,然後對 Write 對象進行處理。如:

JspFragment jspBody = this.getJspBody(); StringWriter out = new StringWriter(); jspBody.invoke(out); String content = out.toString(); String result = content.toUpperCase(); JspWriter writer = this.getJspContext().getOut(); writer.print(result); View Code

 

二、自定義JSTL函數庫

1.定義函數處理類,要求類和方法必須為 public ,且方法必須為 static 。如:

/** * @author solverpeng * @create 2016-07-03-10:34 */ public class MyFunction { public static String hello() { return new Date().toString(); } } MyFunction

2.在 WEB-INF 下新建自定義 tld 文件,可以參考 JSTL 本身一些標簽的的實現,如 c.tld。然後注冊函數。如:

<?xml version="1.0" encoding="UTF-8" ?> <taglib 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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <display-name>solverpeng core</display-name> <tlib-version>1.1</tlib-version> <short-name>solverpeng</short-name> <uri>http://solverpeng.com/tags</uri> <function> <name>hello</name> <function-class>com.nucsoft.myservlet.function.MyFunction</function-class> <function-signature>java.lang.String hello()</function-signature> </function> </taglib> solverpeng tag tld

3.在JSP頁面中導入自定義的函數庫,然後在頁面中使用,如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="http://solverpeng.com/tags" %> <html> <head> <title>Title</title> </head> <body> ${s:hello()} </body> </html> tag.jsp

 

三、JSTL中一個不常用的標簽 c:forTokens

<% pageContext.setAttribute("str", "aa,bb,ee,mm,tt"); %> <c:forTokens items="${str }" delims="," var="item"> ${item } </c:forTokens> c:forTokens

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved