JSTL学习笔记(1)core库

(2007-07-20 18:27:29)
标签:

jstl学习笔记

JSP 标准标记库(JSP Standard Tag Library,JSTL )

流控制

由于可以用 EL 替代 JSP 表达式来指定动态属性值,因此页面创作人员无需使用脚本编制元素。因为脚本编制元素可能是引起 JSP 页面中维护问题的主要原因,所以 JSTL 的主要优点就在于提供了这样简单(且标准)的替代方法。core 库提供了几个定制操作来管理流控制,其形式有 迭代、 条件化和异常处理。

迭代

在 Web 应用程序环境中,迭代主要用于访存和显示数据集,通常是以列表或表中的一系列行的形式显示。实现迭代内容的主要 JSTL 操作是 <c:forEach> 定制标记。该标记支持两种不同样式的迭代:整数范围上的迭代(类似 Java 语言的 for 语句)和集合上的迭代(类似 Java 语言的 IteratorEnumeration 类)。

 

<c:forEach var="m" begin="0" end="10" step="2" varStatus="status">
    <tr>
     <th>
      <c:out value="${m}"></c:out>

     </th>
     <td>
      <c:out value="${m*m}"></c:out>
     </td>
    </tr>
    <c:if test="${status.last}">
    总数为:<c:out value="${status.count}"></c:out>
    </c:if>
   </c:forEach>

当出现 step 时,它也必须是整数值。它指定每次迭代后索引的增量。这样,迭代索引从 begin 属性的值开始,以 step 属性的值为增量进行递增,在迭代索引超过 end 属性的值时停止迭代。注:如果省略了 step 属性,那么步长缺省为 1。

     如果指定了 var 属性,那么将会创建一个带有指定名称的并限定了作用域的变量,并将每次迭代的当前索引值赋给该变量。这一限定了作用域的变量具有嵌套式可视性 ― 只可以在 <c:forEach> 标记体内对其进行访问。

<c:forEach var="item" items="${list}" varStatus="status">
     <tr>
      <td>
       <c:out value="${status.count}" />
      <td>
       <c:out value="${item.name}" />
      <td>
       <c:out value="${item.password}" />
     </tr>
    </c:forEach>

其中items是存储所要的集合,var是变量,用来存放集合里面的每一个对象。

 

<c:forEach> 标记支持 Java 平台所提供的所有标准集合类型。此外,使用该操作来迭代数组(包括基本类型数组)中的元素。不论是对整数还是对集合进行迭代, <c:forEach> 剩余的属性 varStatus 所起的作用相同。和 var 属性一样, varStatus 用于创建限定了作用域的变量。 

特性Getter描述
currentgetCurrent()当前这次迭代的(集合中的)项
indexgetIndex()当前这次迭代从 0 开始的迭代索引
countgetCount()当前这次迭代从 1 开始的迭代计数
firstisFirst()用来表明当前这轮迭代是否为第一次迭代的标志
lastisLast()用来表明当前这轮迭代是否为最后一次迭代的标志
begingetBegin()begin 属性值
endgetEnd()end 属性值
stepgetStep()step 属性值

 

 <c:forEach var="i" begin="100" end="200" step="50" varStatus="status">
   
        begin:<c:out value="${status.begin}">begin</c:out>    
          end:<c:out value="${status.end}">end</c:out>    
         step:<c:out value="${status.step}">step</c:out>
         isLast:<c:out value="${status.last}"></c:out>
         isFirst:<c:out value="${status.first}"></c:out>
         currentCount:<c:out value="${status.count}"></c:out> 
   <c:out value="${i}" />
   <c:if test="${status.last}">
    <br>There are <c:out value="${status.count}" /> numbers in the list.
      </c:if>
   </br>
  </c:forEach>

<c:forTokens> :JSTL 的这个定制操作与 Java 语言的 StringTokenizer 类的作用相似。下面程序中显示的 <c:forTokens> 标记除了比 <c:forEach> 的面向集合版本多一个属性之外,其它属性都相同。对于 <c:forTokens> 而言,通过 items 属性指定要标记化的字符串,而通过 delims 属性提供用于生成标记的一组定界符。和 <c:forEach> 的情形一样,可以使用 beginendstep 属性将要处理的标记限定为那些与相应索引值相匹配的标记。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>JSTL: Iterator Support -- forTokens Example</title> </head> <body bgcolor="#FFFFFF"> <h3><forTokens></h3> <h4>String with '|' delimiter</h4> <c:forTokens var="token" items="bleu,blanc,rouge|vert,jaune|blanc,rouge" delims="|"> <c:out value="${token}"/> " </c:forTokens> <h4>String with '|' and ',' delimiters</h4> <c:forTokens var="token" items="bleu,blanc,rouge|vert,jaune|blanc,rouge" delims="|,"> <c:out value="${token}"/> " </c:forTokens> </body> </html>
core 库提供了两个不同的条件化标记 ― <c:if><c:choose> ― 来实现这些功能。
<c:if> 
仅当对表达式求出的值为 true 时,它才处理标记的主体内容。如果求出的值不为 true ,就忽略该标记的主体内容。其中的程序在上面的源码中都给出了<C:if>
<c:choose> 
每个要测试的条件都由相应的 <c:when> 标记来表示,至少要有一个 <c:when> 标记。只会处理第一个其 test 值为 true<c:when> 标记体内的内容。如果没有一个 <c:when> 测试返回 true ,那么会处理 <c:otherwise> 标记的主体内容。
<c:choose> <c:when test="${pageContext.request.scheme eq 'http'}"> This is an Web session. </c:when> <c:when test="${pageContext.request.scheme eq 'https'}"> This is secure. </c:when> <c:otherwise> microamrs 
 </c:otherwise> </c:choose>
<c:catch> 
它允许在 JSP 页面内进行初级的异常处理。如果产生了一个异常并且已经指定了 <c:catch> 标记的可选属性 var ,那么会将异常赋给指定的变量,这使得能够在页面自身内部进行定制错误处理。
  
URL操作 
JSTL core 库中的其余标记主要是关于 URL。这些标记中的第一个被适当地命名为 <c:url> 标记,用于生成 URL。
<c:url>中,value属性用来指定基本 URL,然后在必要时标记对其进行转换。如果这个基本 URL 以一个斜杠开始,那么会在它前面加上 servlet 的上下文名称。可以使用 context 属性提供显式的上下文名称。如果省略该属性,那么就使用当前 servlet 上下文的名称。URL 重写是由 <c:url> 操作自动执行的。如果 JSP 容器检测到一个存储用户当前会话标识的 cookie,那么就不必进行重写。但是,如果不存在这样的 cookie,那么 <c:url> 生成的所有 URL 都会被重写以编码会话标识。
 URL 重写是由 <c:url> 操作自动执行的。如果 JSP 容器检测到一个存储用户当前会话标识的 cookie,那么就不必进行重写。但是,如果不存在这样的 cookie,那么 <c:url> 生成的所有 URL 都会被重写以编码会话标识。
如: 
<a href="<c:url value='/content/sitemap.jsp'/>">MARS</a> 
当然后面还可以指定context属性,用来解析url的路劲。
  
生成带请求参数的 URL
  
 <c:param> 标记指定了任何请求参数,那么将会使用 HTTP GET 请求的标准表示法将它们的名称和值添加到生成的 URL 后面。此外,还进行 URL 编码:为了生成有效的 URL,将对这些参数的名称或值中出现的任何字符适当地进行转换。
<c:url value="/content/search.jsp"> <c:param name="keyword" value="${searchTerm}"/> <c:param name="month" value="07/2007"/> </c:url>
生成的URL为:
/mars/content/search.jsp?keyword=foo+bar&month=02%2F2003 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值