今天我們會來看JSTL裡面比較特別的一個方法庫fn。他和之前的JSTL都不太一樣,它主要是作用於EL裡面而不是之前看到的<prefix:tagName>的形式。因此稱之為方法庫而不是標籤。
(和我部落格同時發佈:http://www.dotblogs.com.tw/alantsai/archive/2013/10/15/jstll-fn.aspx)
fn 方法庫的基本介紹
fn全稱是function,因為prefix都是給fn因此稱之為fn。從名字可以看出來,其實它提供的方法就是和function有關,而大部份都是和java裡面的String function有關。
fn主要的好處是讓我們再作判斷的時候能夠更容易做到。
fn和其他標籤一樣,需要用taglib directive來加進來,而他的uri是:http://java.sun.com/jsp/jstl/function。
fn是使用在EL裡面而結構都是:fn:functionName()。
fn:contains(String, String)
這一個會判斷第二個參數是否存在於第一個參數裡面,如果有返回true,沒有則false。和java String.contains()一樣概念。
範例:
<c:if test="${fn:contains(header.host, 'localhost') }">
this is from local
</c:if>
如果header裡面的host有localhost的字樣,就輸出對應內容。
fn:containsIgnoreCase(String, String)
和fn:contains()一樣,差別是不區分大小寫。
fn:endsWith(String, String)
用來判斷參數1最後是否和參數2一致。如果一致就返回true,要不然就false。
這個用在判斷例如上傳檔案的文件類型很好用。
範例:
<c:set var="file" value="upload.jpg" />
<c:if test="${fn:endsWith(file, '.jpg') }">
this is a picture
</c:if>
假設今天我們有一個variable要判斷是否是圖片,我們可以用fn:endsWith達到。
fn:startsWith(String, String)
和endsWith一樣,不過這次是看參數一的開頭是否和參數二符合。
fn:escapeXml(String)
這個和c:out裡面的escapeXml一樣的作用,就是把一些例如<編碼,讓有些地方輸出才不會有問題。
在c:out裡面,編碼過的內容是直接輸出來。如果有需要儲存成為參數,fn:escapeXml()就適合。
fn:indexOf(String, String)
相信這個不用怎麼介紹,和String indexOf()一樣,如果沒有找到,返回-1.
fn:split(String, String)
這個也是String常用的,把一個String切割成為String Array然後在做loop。
fn:join(String[], String)
應該也是常用的,把一個String array用符號做間隔變成一個String。和fn:split剛好相反。
fn:length(object)
這個應該也不陌生。不過依照不同傳進去的會有不同效果。例如String的話就是類似length(),Collection就是size()。
結語
其實fn應該對大家來說都很熟悉,畢竟我們平常寫java程式碼都在使用這一些。這邊有包括fn方法庫所以我們就可以更加不需要scriptlet出現在jsp頁面裡面。
透過這一篇,希望大家對於基本如何對string做一些處理和判斷有更深的瞭解。