[JSTL] fn 方法庫


今天我們會來看JSTL裡面比較特別的一個方法庫fn。他和之前的JSTL都不太一樣,它主要是作用於EL裡面而不是之前看到的的形式。因此稱之為方法庫而不是標籤。

前言

今天我們會來看JSTL裡面比較特別的一個方法庫fn。他和之前的JSTL都不太一樣,它主要是作用於EL裡面而不是之前看到的<prefix:tagName>的形式。因此稱之為方法庫而不是標籤。

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做一些處理和判斷有更深的瞭解。

Dotblogs 的標籤: ,

Google+

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