Java for Web学习笔记(二七):JSTL(3)Core Tag(中)

<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>

可以用于轮询。

for(int i = 0; i <= 100; i++){
    out.println("Line " + i + "<br />");
}
<c:forEach var="i" begin="0" end="100">
    Line ${i}<br />
</c:forEach>

如果是i=i+3,可以写成

<c:forEachvar="i" begin="0" end="100"step="3">

可用于显示collection各个元素的信息:

for(User user : users){
    out.println(user.getLastName() + ", " + user.getFirstName() + "<br />");
}
<c:forEach items="${users}" var="user">
    ${user.lastName}, ${user.firstName}<br />
</c:forEach>
<c:forEach var="i" begin="0" end="${fn:length(users)-1}" >
    ${i} :{users[i].lastName}, ${users[i].firstName}<br />
</c:forEach>

这三种方式是一样的,最后一种方式,可以用于适合于限定数目的分页显示。

在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>


相关链接: 我的Professional Java for Web Applications相关文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值