<c:choose>,<c:when>, <c:otherwise>
<c:if>很简单,没有else。如果需要复杂的控制,需要使用其他方式。下面是一个例子:choose用于表示开始和解释,没有属性。而when…when…when…otherwise类似于switch语句中的case…case…case…default或者if..else if…else if…else…,可以有一个或者多个when,而otherwise必须放在最后,可以没有或者只有一个。
<c:choose>
<c:when test="${something}">
"if"
</c:when>
<c:when test="${somethingElse}">
"else if"
</c:when>
...
<c:otherwise>
"else"
</c:otherwise>
</c:choose>
<c:foreach>
可以用于轮询。
|
|
如果是i=i+3,可以写成
<c:forEachvar="i" begin="0" end="100"step="3">
可用于显示collection各个元素的信息:
|
|
|
这三种方式是一样的,最后一种方式,可以用于适合于限定数目的分页显示。
在forEach中还可以加上属性varStatus
<c:forEach items="${users}" var="user" varStatus="status">… </c:forEach>
对于status参数:
◆ ${status.current}相当于user;
◆ ${status.index}相当于i的序列号
◆ ${status.count}是已经遍历的个数,包括当前,从1开始,可以作为分页中的逻辑序号。
◆ ${status.first}和${status.last}返回的是boolean,是否是第一个或者最后一个。
◆ ${status.begin}、${status.end}和${status.step}是<c:forEach>的属性begin、end和step。
<c:forTokens>
forTokens和foreach相似,有着相同的参数var,varStatus,begin,end和step,不同的是foreach是针对collector的,而forTokens是针对String的,并增加了delims表示分割的参数,例子如下:
<c:forTokens items="This,is,a,cool,tag." delims="," var="word">
${word}<br />
</c:forTokens>
输出结果:
This
is
a
cool
tag.
<c:redirect>
在HTTP响应中加上Location header,并修改status code为302,终止jsp的处理。由于其修改了header,因此必须在先client回复前调用(如不能在out之后),否则只是忽略其后的代码。参数和<c:url>的一样。例子如下:
<c:redirect url="http://www.example.com/" />
<c:redirect url="/tickets">
<c:param name="action" value="view" />
<c:param name="ticketId" value="${ticketId}" />
</c:redirect>
<c:redirect url="/browse" context="/store" />
<c:import>
c:import可以将URL资源作为响应输出,或者存放到String的变量(var)或者Reader变量(varReader)中,var和varReader不能同时使用。参数和<c:url>和<c:redirect>一样,如果存放在String中(var)可以通过c:param来动态设置URL,但在不能在存放在Reader中(varReader)中使用。如果存放到Reader中,参数值在</c:import>之前有效,而</c:import>就是确保要close掉Reader。
例子1:将/copyright.jsp的所有输出加在相应的位置上
<c:import url="/copyright.jsp" />
例子2:将ad.jsp?category=${forumCategory}的内容存放在String变量advertisement,其有效范围为request。
<c:import url="/ad.jsp" context="/store" var="advertisement" scope="request">
<c:param name="category" value="${forumCategory}" />
</c:import>
例子3:将一个外部媒体资源存放在Reader变量player中,而<wei:xxxxx>则是模拟使用这个player这个资源。此处,我们应注意到有charEncoding参数,如果在URL获取资源中没有返回Content-Type,或者是其他非ISO-8859-1字符集,需要增加说明。
<c:import url="http://www.example.com/embeddedPlayer.do?video=f8ETe9238MNTte" varReader="player" charEncoding="UTF-8">
<wei:writeVideoPlugin reader="${player}" />
</c:import>
<c:set>和<c:remove>
set用于设置某个参数的值或者某个对象的某个属性,remove则相反,取消某个参数或者删除某个对象的属性。
------【设置/取消参数】------
例子1:简单用法
<c:set var="myVariable" value="Hello, World!" />
...
${myVariable}
...
<c:remove var="myVariable" scope="page" />
例子2:另一种设置value的方式,并增加scope。注意在<c:remove>中如果不设置scope,则所有scope中,匹配的均删除。
<c:set var="complexVariable" scope="request">
nested content including other JSP tags
</c:set>
...
${complexVariable}
...
<c:remove var="complexVariable" scope="request" />
------【设置/取消对象的属性】------
例子3:设置bean的属性,相当于someObject.setPropertyName()或者对于Map的someObject.put("propertyName",...)。
例子3.1
<c:set target="${someObject}" property="propertyName" value="Hello, World!" />
例子3.2
<c:set target="${someObject}" property="propertyName">
nested content including other JSP tags
</c:set>