5.1、下载JSTL
5.2、JSTL类库
类别 |
下属功能 |
URI |
前缀 |
Core |
变量支持 |
http://Java.sun.com/jsp/jstl/core |
c |
流向控制 |
|||
URL管理 |
|||
杂项 |
|||
XML |
Core |
http://java.sun.com/jsp/jstl/xml |
x |
流向控制 |
|||
转换 |
|||
I18n |
语言环境 |
http://java.sun.com/jsp/jstl/fmt |
fmt |
消息格式化 |
|||
数字和日期格式化 |
|||
数据库 |
SQL |
http://java.sun.com/jsp/jstl/sql |
sql |
功能 |
集合长度 |
http://java.sun.com/jsp/jstl/functions |
fn |
字符串操作 |
为了在JSP页面中使用JSTL类库,必须以下列格式使用taglib指令:
[java] view plain copy
- <%@ taglib uri=”uri” prefix=”prefix”%>
例如,为了使用Core类库,必须在JSP页面开头处这样声明:
[java] view plain copy
- <%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
5.3、通用动作指令
5.3.1、out标签
Out标签对表达式进行运算,并将结果输出到当前的JspWriter。Out的语法有两种形式:
[java] view plain copy
- <c:out value=”value” [escapeXml=”{true|false}”] [default=”defaultValue”] />
- <c:out value=”value” [escapeXml=”{true|false}”]>
- Default value
- </c:out>
5.3.2、set标签
利用set标签可以完成以下工作:
1、创建一个字符串和引用该字符串的一个限域变量。
2、创建一个限域变量,并引用已经存在的某一个限域变量。
3、设置限域对象的属性。
如果利用set创建限域变量,那么处于该标签之后的整个jsp页面将都可以使用该变量。
Set标签的语法有4种形式。第一种形式用来创建一个限域变量,在该变量的value属性中可以指定要创建的字符串,或者现有的限域对象。
No1、
[java] view plain copy
- <c:set value=”value” var=”varName” [scope=”{page|request|session|application}”] />
No2、
[java] view plain copy
- <c:set value=”value” var=”varName” [scope=”{page|request|session|application}”] >
- Body content
- </c:set>
No3、设置限域对象的属性值。Target属性指定限域对象,property属性指定限域对象的属性。要赋给该属性的值通过value属性进行设置:
[java] view plain copy
- <c:set target=”target” property=”propertyName” value=”value” />
例如,下面的set标签是将字符串Tokyo赋给限域对象address的city属性:
[java] view plain copy
- <c:set target=”${address}” property=”city” value=”Tokyo” />
No4、值是做为主体内容传递的:
[java] view plain copy
- <c:set target=”target” property=”propertyName”>
- Body content
- </c:set>
5.3.3、remove标签
利用remove标签删除限域变量,语法如下:
[java] view plain copy
- <c:remove var=”varName” [scope=”{page|request|session|application}”] />
注意:限域变量引用的对象并没有被删除。因此,如果另一个限域对象也在引用这个对象,那么仍然可以通过另外这个限域对象来访问该对象。
5.4、条件式动作指令
在JSTL中有4个标签可以执行条件式动作指令:if、choose、when和otherwise。
5.4.1、if标签
[java] view plain copy
- <c:if test=”testCondition” var=”varName” [scope=”{page|request|session|application}” />
或者
[java] view plain copy
- <c:if test=”testCondition” [var=”varName”] [scope=”{page|request|session|application}”>
- Body content
- </c:if>
属性 |
类型 |
描述 |
Test+ |
Boolean |
决定是否应该处理某些现有主体内容的测试内容 |
Var |
String |
引用测试条件的限域变量名称,var的类型为boolean |
Scope |
String |
用var设置的限域变量的范围 |
5.4.2、choose、when和otherwise标签
Choose和when标签的作用与java中的switch和case关键字相似,也就是说,它们为互相排斥的条件式执行提供相关内容。Choose标签内部必须嵌有一个或多个when标签,每个when标签代表可以运行运算和处理的一种情况。Otherwise标签用于默认的条件代码块,如果所有when标签的测试条件运算结果都不为true,就会执行该代码块。如果有otherwise标签,它必须放在最后一个when标签之后。
例如:
[java] view plain copy
- <c:choose>
- <c:when test=”${param.status==’full’}”>
- You atr a full member
- </c:when>
- <c:when test=”${param.status==’student’}”>
- You are a student memeber
- </c:when>
- <c:otherwise>
- Please register
- </c:otherwise>
- </c:choose>
5.5、iterator动作指令
两个可以执行iterator动作指令的标签:forEach和forTokens。
5.5.1、forEach标签
forEach的语法有两种形式,第一种是将body内容重复一定的次数:
[java] view plain copy
- <c:forEach [var=”varName”] begin=”begin” end=”end” step=”step”>
- Body content
- <c:forEach>
第二种形式用于迭代一个对象集合:
[java] view plain copy
- <c:forEach items=”collection” [var=”varName”] [varStatus=”varStatusName”]
- [begin=”begin”] [end=”end”] [step=”step”]>
- Body content
- </c:forEach>
属性 |
类型 |
描述 |
Var |
String |
引用当前迭代项目的限域变量名称 |
Items+ |
支持的任何类型 |
要迭代的对象集合 |
varStatus |
String |
保存迭代状态的限域变量名称,它的值类型为javax.servlet.jsp.jstl.core.LoopTagStatus varStatus定义了一个循环变量var,循环状态变量中保存了循环进行时保存的信息,包括下面几个属性: index:当前循环索引号 count成员总数 last:是否为最后一个成员 index的值是迭代的索引值+begin |
Begin+ |
Int |
如果指定了items,那么迭代将从处于指定索引的项开始,该集合中的第一个项索引为0。如果没有指定items,迭代将从该值设定的索引开始。如有指定,begin的值必须大于或者等于0。 |
End+ |
Int |
如果指定了items,那么迭代将结束于处于指定索引的项;如果没有指定的items,那么当索引到达指定值时,迭代结束。 |
Step+ |
Int
|
步长,迭代会从集合的第一个step项开始,根据step步长逐个地进行,如果有step属性,那么它的值必须大于或者等于1。 |
5.5.2、forTokens标签
forTokens标签可用于迭代以特定分界符分隔的token,这个动作指令的语法如下:
[java] view plain copy
- <c:forTokens items=”stringOfTokens” delims=”delimiters” [var=”varName”] [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
- Body content
- </c:forTokens>
属性 |
类型 |
描述 |
Var |
String |
引用当前迭代项的限域变量名称 |
Items+ |
String |
要迭代的token字符串 |
varStatus |
String |
保存迭代状态的限域变量名称,它的值类型为javax.servlet.jsp.jstl.core.LoopTagStatus |
Begin+ |
Int |
迭代的起始索引,这里的索引是从0开始的。如果有begin属性,那么它的值必须大于或者等于0。 |
End+ |
Int |
迭代的结束索引,这里的索引是从0开始的。 |
Step |
Int |
迭代会从集合的第一个step项开始,逐个地进行。如果有step属性,那么它的值必须大于或者等于1 |
Delims+ |
String |
一组分节符 |
下面是一个forTokens范例:
[java] view plain copy
- <c:forTokens var=”item” items=”Argentina,Brazil,Chile” delims=”,”>
- <c:out value=”${item}” /><br />
- </c:forTokens>
- 当它放在jsp中时,上述forTokens将产生以下结果:
- Argentina
- Brazil
- Chile
5.6、格式化动作指令
JSTL提供了格式化和解析数字和日期的标签,有:formatNumber、formatDate、tomeZone、setTimeZone、parseNumber及parseDate。
5.7、函数
除了定制动作指令之外,JSTL1.1和1.2中还定义了一组标准函数,可以用在EL表达式中,这些函数分组放在函数标签类库中。当使用这些函数时,必须在JSP上使用taglib指令。
<%@ taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>
调用函数时,要以下面这种格式来使用EL:
${fn:functionName}
这里的functionName是函数名称
5.7.1、contains函数
语法如下:
Contains(String,substring)
例如下面这些EL表达式都返回true:
[java] view plain copy
- <c:set var=”myString” value=”Hello World” />
- ${fn:contains(myString, “Hello”)}
- ${fn:contains(“Stella Cadente”, “Cadente”)}
5.7.2、containsIgnoreCase函数
containsIgnoreCase函数与contains函数类似,但其检测是区分大小写的,具体语法如下:
containsIgnoreCase(String, substring)
5.7.3、endsWith函数
endsWith函数检测某个字符串是否以指定的后缀结尾。其返回值是一个Boolean值,具体语法如下:
endsWith(string, suffix)
例如:以下EL表达式将返回true
[java] view plain copy
- ${fn:endsWith(“Hello World”, “World”)}
5.7.4、escapeXml函数
该函数用于给String进行编码,它的转换方法与out标签将其escapeXml属性设为true时相似,具体语法如下:
escapeXml(string)
例如:El表达式
[java] view plain copy
- ${fn:escapeXml(“User <br/> to change lines”)}
- 显示为:
- Use <br/> to change lines
5.7.5、indexOf函数
indexOf函数返回在某个字符串中第一次出现指定子字符串时的索引。如果没有找到指定的子字符串,它将返回-1,具体语法如下:
indexOf(string,substring)
例如,以下EL表达式将返回7:
[java] view plain copy
- ${fn:indexOf(“Stella Cadente”, “Cadente”)}
5.7.6、join函数
Join函数将一个String数组中的所有元素都合并成一个字符串,中间用指定的分隔符隔开,其语法如下:
Join(array, separator)
如果数组为null,将返回一个空的字符串。
例如,如果myArray是一个具有两个元素”my”和”world”的String数组,那么EL表达式:
[java] view plain copy
- ${fn:join(myArray, “,”)}将返回”my,world”
5.7.7、length函数
length函数将返回一个集合中的项目数,或者一个字符串中的字符数。其语法如下:
length(input)
举个例子,下面的EL表达式将返回14:
[java] view plain copy
- ${fn:length(“Stella Cadente”)}
5.7.8、replace函数
Replace函数用afterString替换某一个字符串中所有的beforeString,并返回结果。其语法replace(string, beforeSubstring, afterSubstring)
例如,EL表达式
[java] view plain copy
- ${fn:replace(“Stella Cadente”, “e”, “E”)}
- 将返回”StElla CadEntE”
5.7.9、split函数
Split函数将一个字符串分解成一组子字符串,它的作用与join相反。例如,以下代码分界字符串”my,world”,并将结果保存在限域变量split中。然后,它利用forEach标签将split格式化成一个HTML表格。
[java] view plain copy
- <c:set var=”split” value=’${fn:split(“my,world”,”,”)}’ />
- <table>
- <c:forEach var=”substring” items=”${split}”>
- <tr><td>${substring}</td></tr>
- </c:forEach>
- </table>
- 其结果为:
- <table>
- <tr><td>my</td></tr>
- <tr><td>world</td></tr>
- </table>
5.7.10、startsWith函数
startsWith函数测试某个字符串是否以指定的前缀开头,其语法如下:
startsWith(string,prefix)
例如,以下EL表达式将返回true:
[java] view plain copy
- ${fn:startsWith(“Stella Cadente”, “St”)}
5.7.11、substring函数
Substring函数将返回一个从指定的起始索引(从0开始,含起始索引)至指定的结束索引之间的子字符串,其语法如下:
Substring(String, beginIndex, endIndex)
例如,以下EL表达式将返回”Stel”
[java] view plain copy
- ${fn:substring(“Stella Cadente”, 0, 4)}
5.7.12、substringAfter函数
substringAfter函数返回第一次出现指定子字符串之后的字符串部分,其语法如下:
substringAfter(string, substring)
例如,以下EL表达式
[java] view plain copy
- ${fn:substringAfter(“Stella Cadente”, “e”)}
- 将返回”lla Cadente”。
5.7.13、substringBefore函数
substringBefore函数返回第一次出现子字符串之前的字符串部分,其语法如下:
substringBefore(string, substring)
例如,以下EL表达式将返回”St”
[java] view plain copy
- ${fn:substringBefore(“Stella Cadente”, “e”)}
5.7.14、toLowerCase函数
toLowerCase函数将字符串转换成全部小写字母,其语法如下:
toLowerCase(string)
例如,以下EL表达式将返回”stella cadente”:
[java] view plain copy
- ${fn:toLowerCase(“Stella Cadente”)}
5.7.15、toUpperCase函数
toUpperCase函数将字符串转换成全部大写字母,其语法如下:
toUpperCase(string)
例如,以下EL表达式将返回”STELLA CADENTE”
[java] view plain copy
- ${fn:toUpperCase(“Stella Cadente”)}
5.7.16、trim函数
trim函数去掉字符串前后的空格,其语法如下:
trim(string)
例如,以下EL表达式将返回”Stella Cadente”
[java] view plain copy
- ${fn:trim(“ Stella Cadente ”)}