5.7 函数

5.7 函数

除了定制行为外,JSTL 1.1JSTL 1.2还定义了一套可以在EL表达式中使用的标准函数。这些函数都集中放在function标签库中。为了使用这些函数,必须在JSP的最前面使用以下taglib指令:

1
2
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions"
prefix="fn" %>

调用函数时,要以下列格式使用一个EL

1
${fn:functionName}

这里的functionName是函数名。
大部分函数都用于字符串操作。例如,length函数用于字符串和集合,并返回集合或者数组中的项目数,或者返回一个字符串的字符数。

5.7.1 contains函数

contains函数用于测试一个字符串中是否包含指定的子字符串。如果字符串中包含该子字符串,则返回值为true,否则,返回false。其语法如下:

1
contains(string, substring).

实例

例如,下面这两个EL表达式都将返回true

1
2
3
4
<c:set var="myString" value="Hello World" />
<!-- 判断字符串有界变量`myString`中是否包含`Hello` -->
${fn:contains(myString, "Hello")}
<br> ${fn:contains("Stella Cadente", "Cadente")}

运行结果:

1
2
true
true

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>function Test</title>
</head>
<body>
<c:set var="myString" value="Hello World" />
<!-- 判断字符串有界变量`myString`中是否包含`Hello` -->
${fn:contains(myString, "Hello")}
<br> ${fn:contains("Stella Cadente", "Cadente")}
</body>
</html>

5.7.2 containsIgnoreCase函数

containsIgnoreCase函数与contains函数相似,但测试是区分大小写的,其语法如下:

1
containsIgnoreCase(string, substring)

例如,下列的EL表达式将返回true

1
${fn:containsIgnoreCase("Stella Cadente", "CADENTE")}

5.7.3 endsWith函数

endsWith函数用于测试一个字符串是否以指定的后缀结尾,其返回值是一个Boolean,语法如下:

1
endsWith(string, suffix)

例如,下列的EL表达式将返回true

1
${fn:endsWith("Hello World", "World")}

5.7.4 escapeXml函数

escapeXml函数用于给String编码。这种转换与out标签将其escapeXml属性设为true一样。escapeXml的语法如下:

1
escapeXml(string)

例如,下面的EL表达式:

1
${fn:escapeXml("Use<br/>to change lines")}

将被渲染成:

1
Use &lt;br/&gt; to change lines

这样浏览器就不会把<br/>当成换行符,而是显示<br/>这个字符串本身。

5.7.5 indexOf函数

indexOf函数返回指定子字符串在某个字符串中第一次出现时的索引。**如果没有找到指定的子字符串,则返回−1**。其语法如下:

1
indexOf(string, substring)

例如,下列的EL表达式将返回7:

1
${fn:indexOf("Stella Cadente", "Cadente")}

5.7.6 join函数

join函数将一个String数组中的所有元素都合并成一个字符串并用指定的分隔符分开,其语法如下:

1
join(array, separator)

如果这个数组为null,就会返回一个空字符串。

1
${fn:join(myArray,",")}

将返回“my, world”。

5.7.7 length函数

length函数用于返回集合中的项目数,或者字符串中的字符数,其语法如下:

1
length{input}

下列的EL表达式将返回14:

1
${fn:length("Stella Cadente", "Cadente")}

5.7.8 replace函数

replace函数将字符串中出现的所有beforeStringafterString替换,并返回结果,其语法如下:

1
replace(string, beforeSubstring, afterSubstring)

例如,下列的EL表达式将返回“StElla CadEntE”:

1
${fn:replace("Stella Cadente", "e", "E")}

5.7.9 split函数

split函数用于将一个字符串分离成一个子字符串数组。它的作用与join相反。例如,下列代码是分离字符串“my,world”,并将结果保存在有界变量split中。随后,利用forEach标签将split格式化成一个HTML表:

1
2
3
4
5
6
<c:set var="split" value='${fn:split("my,world",",")}'/>
<table>
<c:forEach var="substring" items="${split}">
<tr><td>${substring}</td></tr>
</c:forEach>
</table>

结果为:

1
2
3
4
<table>
<tr><td>my</td></tr>
<tr><td>world</td></tr>
</table>

5.7.10 startsWith函数

substring函数用于返回一个从指定的起始索引(含)到指定的终止索引的子字符串,其语法如下:

1
substring(string, beginIndex, endIndex)

下列的EL表达式将返回“Stel”:

1
${fn:substring("Stella Cadente", 0, 4)}

5.7.12 substringAfter函数

substringAfter函数用于返回指定子字符串第一次出现后的字符串部分,其语法如下:

1
substringAfter(string, substring)

例如,下列的EL表达式将返回“lla Cadente”:

1
${fn:substringAfter("Stella Cadente", "e")}

5.7.13 substringBefore函数

substringBefore函数用于返回指定子字符串第一次出现前的字符串部分,其语法如下:

1
substringBefore(string, substring)

例如,下列的EL表达式将返回“St”:

1
${fn:substringBefore("Stella Cadente", "e")}

5.7.14 toLowerCase函数

toLowerCase函数将一个字符串转换成它的小写版本,其语法如下:

1
toLowerCase(string)

例如,下列的EL表达式将返回“stella cadente”:

1
${fn:toLowerCase("Stella Cadente")}

5.7.15 toUpperCase函数

toUpperCase函数将一个字符串转换成它的大写版本,其语法如下:

1
toUpperCase(string)

例如,下列的EL表达式将返回“STELLA CADENTE”:

1
${fn:toUpperCase("Stella Cadente")}

5.7.16 trim函数

trim函数用于删除一个字符串开头和结尾的空白,其语法如下:

1
trim(string)

例如,下列的EL表达式将返回“Stella Cadente”:

1
${fn:trim("            Stella Cadente      ")}