[Tag] 自定義方法


透過前面幾篇,相信對於如何自定義tag應該沒有什麼問題了。不過在JSTL裡面有個特殊的tag,專門用在EL裡面,因此我們稱之為function tag。

我們自己也可以自定義function tag,這樣在使用EL的時候就不會感覺到力不從心。這一篇我們來看看如何自定義function tag。

前言

透過前面幾篇,相信對於如何自定義tag應該沒有什麼問題了。不過在JSTL裡面有個特殊的tag,專門用在EL裡面,因此我們稱之為function tag。

我們自己也可以自定義function tag,這樣在使用EL的時候就不會感覺到力不從心。這一篇我們來看看如何自定義function tag。

function tag的本質

其實function tag只是一個static method。定義好了signature,然後我們就可以符合signature即可以呼叫。

function tag非常像Asp .net Mvc裡面的HtmlHelpers。非常適合把一些常用的程式碼放在function tag,然後多個頁面可以reuse。

function tag 的組成

上面提到過,function tag只是普通的static method而已,差別只在於我們需要把它註冊到tld檔案裡面,並且要使用的時候透過taglib directive加入jsp 頁面,之後就可以透過el來使用。

下面我們只做簡單的例子來看如何做function tag。我們將會實作兩個function tag,一個用來把字母轉大寫,一個則是把字母轉小寫。


public class FunctionTag {

	public static String ToLower(String inString)
	{
		return inString.toLowerCase();
	}
	
	public static String ToUpper(String inString)
	{
		return inString.toUpperCase();
	}	
	
}

非常簡單的兩個Static method,接下來我們需要像註冊一般自定義tag一樣,把這兩個method註冊到tld裡面:


  ....
  <function>
  	<description>turns a string to all lower case</description>
  	<name>toLower</name>
  	<function-class>tag.FunctionTag</function-class>
  	<function-signature>java.lang.String ToLower(java.lang.String)</function-signature>
  	<example>${fn:toLower(java.lang.String)}</example>
  </function>
  
  <function>
  	<description>turns a string to all upper case</description>
  	<name>toUpper</name>
  	<function-class>tag.FunctionTag</function-class>
  	<function-signature>java.lang.String ToUpper(java.lang.String)</function-signature>
  	<example>${fn:toUpper(java.lang.String)}</example>
  </function>
  ...

可以看到和註冊tag不同在於,使用的是function的標籤。而裡面需要必填的是:

  1. name - 用來畫面上面指定呼叫的名稱
  2. function-class - static method 所在的class。記得要給fully qualified name
  3. function-signature - 要呼叫的method signature。需要注意裡面的type最好都給fully qualified name

這樣就可以了。

最後,和普通tag一樣,在jsp要使用前都需要註冊。註冊不需要多說,而呼叫的方式和jstl 裡面fn一樣,使用在el裡面,然後格式是:prefix:name(param eter)


${hello2:toLower("TESTIng") }
<br/>
${hello2:toUpper("testing") }

我這邊例子是註冊的prefix是hello2,然後兩個不同的name。

結語

到目前為止我們把自定義tag的基本都涵蓋了。從jsp 1.x的方式到 jsp 2.x。最後有介紹了如何自定義tag function。

到目前位置,希望大家在使用jsp view的時候,儘量避免使用Scriptlet,而透過自定義tag的方式也不會有力不從心的感覺。

Dotblogs 的標籤: ,

Google+

創用 CC 授權條款
Alan Tsai 的隨手筆記Alan Tsai製作,以創用CC 姓名標示 4.0 國際 授權條款釋出。