透過前面幾篇,相信對於如何自定義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的標籤。而裡面需要必填的是:
- name - 用來畫面上面指定呼叫的名稱
- function-class - static method 所在的class。記得要給fully qualified name
- 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的方式也不會有力不從心的感覺。