JSTL重要技术经验积累

本文介绍了在JSP中使用JSTL标签库进行集合遍历的方法,包括引入标准函数、判断集合是否为空、获取集合大小及遍历集合的具体操作。同时详细解释了<c:forEach>标签的使用方式及其属性,如var、items、varStatus等。

一、循环遍历集合
   1、在jsp中引入标准函数声明
 <%@ taglib uri="
http://java.sun.com/jsp/jstl/core" prefix="c"%>      
   2、若要判断集合的大小,则需要引入如下声明
 <%@ taglib prefix="fn" uri="
http://java.sun.com/jsp/jstl/functions" %>
   3、如何使用jstl判断集合是否为空
 ${user}为集合,user为集合名
 <c:if test="${empty user}">无信息!</c:if>为空
 <c:if test="${!empty user}">其它</c:if>非空
   4、如何取得集合的大小
        ${fn:length(集合名<如果是session中的集合则应该加上sessionScope.键>)}
 ${fn:length(map)}
   5、如何取得保存在session中的对象?
        ${sessionScope.键.对象属性}
   6、varStatus显示循环变量的状态
      例:<tag:forEach var="currentFood" items="${sessionScope.foods}" varStatus="status"
              <tag:if test="${status%2==1}">
              .....................
              </tag:if>
         </tag:forEach>
      其中status这个变量就记录了循环变量的状态

      如何在遍历集合时,知道当前遍历的是第几个对象?

      可以用<c:out value="状态变量名.count">

      count:当前这次迭代从1开始的迭代计数。
   7、如何遍历Map集合
      <c:forEach var="foodmap" items="${sessionScope.cart}" varStatus="status">
         <c:set var="subtotal" value="${foodmap.value.bean.foodPrice*foodmap.value.quantity}"></c:set>
      </c:forEach>
      遍历Map集合的值:
      foodmap:保存session中的map
      foodmap.value:取得map的值,即获取保存在map中的一个对象
      要获取对象中的数据,必须用foodmap.value.quantity去点对象的属性(quantity就是对象的属性)

   8、遍历集合原理详解

         在JSP的开发中,迭代是经常要使用到的操作。例如,逐行的显示查询的结果等。在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出。现在,通过JSTL的迭代标签可以在很大的程度上简化迭代操作。
      JSTL所支持的迭代标签有两个,分别是<c:forEach>和<c:forTokens>。在这里介绍的是<c:forEach>标签。
      简单点说,<c:forEach>标签的作用就是迭代输出标签内部的内容。它既可以进行固定次数的迭代输出,也可以依据集合中对象的个数来决定迭代的次数。
      <c:forEach>标签的语法定义如下所示。
            <c:forEach var="name" items="expression" varStatus="name"
                  begin="expression" end="expression" step="expression">
                  body content
            </c:forEach>
      <c:forEach>标签具有以下一些属性:
      var:迭代参数的名称。在迭代体中可以使用的变量的名称,用来表示每一个迭代变量。类型为String。
       items:要进行迭代的集合。对于它所支持的类型将在下面进行讲解。
       varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息。
       begin:如果指定了items,那么迭代就从items[begin]开始进行迭代;如果没有指定items,那么就从begin开始迭代。它的类型为整数。
       end:如果指定了items,那么就在items[end]结束迭代;如果没有指定items,那么就在end结束迭代。它的类型也为整数。
       step:迭代的步长。
      <c:forEach>标签的items属性支持Java平台所提供的所有标准集合类型。此外,您可以使用该操作来迭代数组(包括基本类型数组)中的元素。它所支持的集合类型以及迭代的元素如下所示:
       java.util.Collection:调用iterator()来获得的元素。
       java.util.Map:通过java.util.Map.Entry所获得的实例。
       java.util.Iterator:迭代器元素。
       java.util.Enumeration:枚举元素。
       Object实例数组:数组元素。
       基本类型值数组:经过包装的数组元素。
       用逗号定界的String:分割后的子字符串。
       javax.servlet.jsp.jstl.sql.Result:SQL查询所获得的行。
       不论是对整数还是对集合进行迭代,<c:forEach>的varStatus属性所起的作用相同。和var属性一样,varStatus用于创建限定了作用域的变量(改变量只在当前标签体内起作用)。不过,由varStatus属性命名的变量并不存储当前索引值或当前元素,而是赋予javax.servlet.jsp.jstl.core.LoopTagStatus类的实例。该类包含了一系列的特性,它们描述了迭代的当前状态,如下这些属性的含义如下所示:
       current:当前这次迭代的(集合中的)项。
       index:当前这次迭代从0开始的迭代索引。
       count:当前这次迭代从1开始的迭代计数。
       first:用来表明当前这轮迭代是否为第一次迭代,该属性为boolean类型。
       last:用来表明当前这轮迭代是否为最后一次迭代,该属性为boolean类型。
       begin:begin属性的值。
       end:end属性的值
       step:step属性的值
      下面就来看两个基本的例子,第一个例子是依次输出集合内的元素。
      <c:forEach var="item" items="${contents}" varStatus="status">
            $status.count:${item}
      </c:forEach>
     下面的例子是一个固定次数的迭代,用来输出1到9的平方。
     <c:forEach var="x" begin="1" end="9" step="1">
    和 var 属性一样,varStatus 用于创建限定了作用域的变量。不过,由 varStatus 属性命名的变量并不存储当前索引值或当前元素,而是赋予 javax.servlet.jsp.jstl.core.LoopTagStatus 类的实例。该类定义了一组特性,它们描述了迭代的当前状态,下面列出了这些特性:

特性       Getter                      描述
current    getCurrent()          当前这次迭代的(集合中的)项
index      getIndex()               当前这次迭代从 0 开始的迭代索引
count      getCount()             当前这次迭代从 1 开始的迭代计数
first      isFirst()                  用来表明当前这轮迭代是否为第一次迭代的标志
last       isLast()                  用来表明当前这轮迭代是否为最后一次迭代的标志
begin      getBegin()             begin 属性值
end        getEnd()                 end 属性值
step       getStep()                step 属性值 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值