JSTL标签库的基本教程之核心标签库(二)

200 阅读4分钟
原文链接: www.shsxt.com
JSTL标签库的基本教程之核心标签库(二)
 
  • 核心标签库
标签 描述
<c:out> 用于在JSP中显示数据,就像<%= ... >
<c:set> 用于保存数据
<c:remove> 用于删除数据
<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来
<c:if> 与我们在一般程序中用的if一样
<c:choose> 本身只当做<c:when>和<c:otherwise>的父标签
<c:when> <c:choose>的子标签,用来判断条件是否成立
<c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:forEach> 基础迭代标签,接受多种集合类型
<c:forTokens> 根据指定的分隔符来分隔内容并迭代输出
<c:param> 用来给包含或重定向的页面传递参数
<c:redirect> 重定向至一个新的URL.
<c:url> 使用可选的查询参数来创造一个URL
 
核心库标签的分类
  1. 表达式类:out、set、remove、catch
  2. 逻辑控制类:if、choose、when、otherwise
  3. 循环判断类:forEach、forTokens
  4. URL操作类:import、url、redirect、param
 
在上篇文章中,我们讲了JSTL的核心标签库的表达式类标签:out标签、set标签、remove标签、catch标签。那么我们接下来说一说逻辑控制类标签以及循环判断类标签
 
  • 逻辑控制类标签
 
  • if标签(单一的if判断,没有else)
属性 描述 EL支持 是否必须 默认值
test 判断条件 支持
var 判断结果存储的变量名 不支持
scope 变量的存储范围 不支持 page
语法:
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>
条件成立时的输出内容
</c:if>
   示例:
<c:set var="name" value="lisa"></c:set>  
<!-- 当条件成立时,输出:我是lisa -->
<c:if test="${name=='lisa'}" var="var1" scope="page">我是lisa</c:if>  
<!-- 当条件不成立时,不输出 -->
<c:if test="${name=='tony'}" var="var2">tony也是lisa</c:if>  
var1:${var1} -- var2:${var2}  
<!-- 我是lisa  var1:true -- var2:false -->
 
 
  • choose、when、otherwise标签(嵌套使用相当于if-elseif-else)
属性 描述 EL支持 是否必须 默认值
test 判断条件 支持
语法:
<c:choose>  
    <c:when test="">  
        前面的条件都不成立但此条件成立时输出  
    </c:when>  
    <c:when test="">  
        前面的条件都不成立但此条件成立时输出  
    </c:when>  
    ......  
    <c:otherwise>  
        前面的条件都不成立时才输出  
    </c:otherwise>  
</c:choose>
   示例:
<c:set var="score" value="60"></c:set>  
<c:choose>  
<!-- 不满足条件,不输出 -->
    <c:when test="${score < 60}">  
         不及格
    </c:when>  
    <!-- 满足条件,输出 -->
    <c:when test="${score == 60}">  
         刚好及格  
    </c:when>  
    <!-- 不满足条件,不输出 -->
    <c:when test="${score > 60}">  
         良好  
    </c:when>  
    <!-- 上面有条件成立,不输出 -->
    <c:otherwise>  
         取消资格  
    </c:otherwise>  
</c:choose>  
<!-- 刚好  -->
 
 
  • 循环判断类标签
 
  • forEach标签(循环遍历)
 forEach参数说明
名称 描述 EL支持 是否必须 默认值
items 遍历的集合对象 支持
var 每次遍历的对象 不支持
varStatus 遍历的相关信息 不支持
begin 开始的位置(正数) 支持 0
end 结束的位置(正数) 支持 集合长度
step 遍历的步长(正数) 支持 1
 
varStatus属性说明
名称 类型 说明
index number 遍历对象的索引,从0开始
Count number 总共循环的次数,从1开始
First boolean 本次循环遍历的是否是集合的第一个元素
end boolean 本次循环遍历的是否是集合的最后一个元素
 
语法1:遍历集合,类似(String s:new String[]{“a”,”b”})
<c:forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>  
    输出内容  
</c:forEach>
 
语法2:循环指定次数,类似(int i=0;i<5;i++)
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" 
end="end" [step="step"]>    
    输出内容  
</c:forEach>
 
 示例:
循环List
<%  
List<String> list = new ArrayList<String>();  
list.add("A");  
list.add("B");  
list.add("C");  
list.add("D");  
list.add("E");  
list.add("F");  
request.setAttribute("list",list);  
%>  
<c:forEach items="${list}" var="l" varStatus="ll" begin="1" end="5" step="2">  
    第${ll.count}次迭代,索引:${ll.index},值是:${l},是否是第1个:${ll.first},是否是最后 一个:${ll.last}<br>  
</c:forEach>  
<!--   
第1次迭代,索引:1,值是:B,是否是第1个:true,是否是最后 一个:false  
第2次迭代,索引:3,值是:D,是否是第1个:false,是否是最后 一个:false  
第3次迭代,索引:5,值是:F,是否是第1个:false,是否是最后 一个:true  
-->  

遍历Map
<%  
Map<String,String> map = new HashMap<String,String>();  
map.put("key1", "value1");  
map.put("key2", "value2");  
map.put("key3", "value3");  
request.setAttribute("map",map);  
%>  
<c:forEach items="${map}" var="m">  
    key:${m.key},value:${m.value}<br>  
</c:forEach>  
<!--   
key:key3,value:value3  
key:key2,value:value2  
key:key1,value:value1  
-->

遍历Set
<%  
Set<String> set = new HashSet<String>();  
set.add("周杰伦");  
set.add("林俊杰");  
set.add("陈奕迅");  
request.setAttribute("set",set);  
%>  
<c:forEach items="${set}" var="s">  
    ${s}  
</c:forEach>  
<!-- 陈奕迅  林俊杰 周杰伦 -->
 
循环指定次数
<c:forEach var="i" varStatus="ii" begin="0" end="10" step="3">  
    第${ii.count}次迭代,索引:${ii.index},值是:${i},是否是第1个:${ii.first},是否是最后 一个:${ii.last}<br>  
</c:forEach>  
<!--   
第1次迭代,索引:0,值是:0,是否是第1个:true,是否是最后 一个:false  
第2次迭代,索引:3,值是:3,是否是第1个:false,是否是最后 一个:false  
第3次迭代,索引:6,值是:6,是否是第1个:false,是否是最后 一个:false  
第4次迭代,索引:9,值是:9,是否是第1个:false,是否是最后 一个:true  
-->
 
 
  • forTokens标签(字符串拆分,相当于String的split方法)
名称 描述 EL支持 是否必须 默认值
items 要被拆分的字符串 支持
delims 用来拆分的字符串 不支持
var 保存每次拆分的字符串 不支持
varStatus 第几次拆分的相关信息 不支持
begin 起始位置 支持 0
end 终止位置 支持 被拆分后的长度
step 步长 支持 1
 
语法:
<c:forTokens items="str" delims="selStr" [var="varName"]  
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>  
输出内容  
</c:forTokens>  
注:var、varStatus、begin、end、step和forEach的参数作用相同
 
示例:
<c:forTokens items=",,,," delims="," var="i" varStatus="a">  
    ${i}  
</c:forTokens>  
<!-- 我 很 喜 欢 你 -->