EL语言和JSTL标签库

 1:使用:将jstl.jar和standard.jar复制到自己的web应用程序的web—inf/lib目录下便可以使用。
2:EL表达式语言是jsp2.0的一个主要组件,EL 擅长寻找对象及其特性,然后对它们执行简单操作;它不是编程语言,甚至不是脚本编制语言。但是,与 JSTL 标记一起使用时,它就能使用简单而又方便的符号来表示复杂的行为。EL 表达式的格式是这样的:用美元符号($)定界,内容包括在花括号({})中,通过“.”或“[]”来存取数据,例如: ${param.name} 或 ${param["name"]}     表示读取请求参数name的值。
   EL提供了两种不同的存取器(点运算符( . )和方括号运算符( [] )),也支持通过 EL 操作特性和元素。
     点运算符通常用于访问对象的特性。例如,在表达式 ${user.firstName} 中,使用点运算符来访问 user
  标识符所引用对象的名为 firstName 的特性。EL 使用 Java bean约定访问对象特性,因此必须定义这个特性的 getter 方法(通常是名为 getFirstName()的方法),以便表达式正确求值。当被访问的特性本身是对象时,可以递归地应用点运算符。例如,如果我们虚
  构的 user 对象有一个实现为 Java 对象的 address 特性,那么也可以用点运算符来访问这个对象的特性。例如,表达式 ${user.address.city}将会返回这个地址对象嵌套的 city 特性。
      方括号运算符用来检索数组和集合的元素。在数组和有序集合(也即,实现了 java.util.List接口的集合)的情况下,把要检索的元素的下标放在方括号中。例如,表达式 ${urls[3]} 返回 urls标识符所引用的数组或集合的第四个元素(和 Java 语言以及 JavaScript 中一样,EL 中的下标是从零开始的)。
   对于实现 java.util.Map 接口的集合,方括号运算符使用关联的键查找存储在映射中的值。在方括号中指定键,并将相应的值作为表达式的值返回。例如,表达式 ${commands["dir"]} 返回与 commands 标识符所引用的 Map 中的 "dir" 键相关联的值。

对于上述两种情况,都可允许表达式出现在方括号中。对嵌套表达式求值的结果将被作为下标或键,用来检索集合或数组的适当元素。和点运算符一样,方括号运算符也可以递归应用。这使得 EL 能够从多维数组、嵌套集合或两者的任意组合中检索元素。此外,点运算符和方括号运算符还可以互操作。例如,如果数组的元素本身是对象,则可以使用方括号运算符来检索该数组的元素,并结合点运算符来检索该元素的一个特性(例如 ${urls[3].protocol} )。

 假定 EL 充当指定动态属性值的简化语言,EL 存取器有一个有趣的功能(与 Java 语言的存取器不同),那就是它们在应用于 null 时不抛出异常。如果应用 EL 存取器的对象(例如, ${foo.bar} 和 ${foo["bar"]} 中的 foo 标识符)是 null ,那么应用存取器的结果也是 null 。事实证明,在大多数情况下,这是一个相当有用的行为,不久您就会了解这一点。

最后,点运算符和方括号运算符可能实现某种程度的互换。例如,也可以使用 ${user["firstName"]} 来检索 user 对象的 firstName 特性,正如可以用 ${commands.dir} 获取与 commands 映射中的 "dir" 键相关联的值一样。
3:
EL 运算符:
   类别            运算符 
   算术运算符    + 、 - 、 * 、 / (或 div )和 % (或 mod ) 
   关系运算符    == (或 eq )、 != (或 ne )、 < (或 lt )、 > (或 gt )、 <= (或 le )和 >= (或 ge ) 
   逻辑运算符    && (或 and )、 || (或 or )和 ! (或 not ) 
   验证运算符    empty 
  
EL 隐式对象

类别            标识符                   描述 
JSP             pageContext        PageContext 实例对应于当前页面的处理 
作用域          pageScope          与页面作用域属性的名称和值相关联的 Map 类 
                requestScope       与请求作用域属性的名称和值相关联的 Map 类 
                sessionScope       与会话作用域属性的名称和值相关联的 Map 类 
                applicationScope   与应用程序作用域属性的名称和值相关联的 Map 类 
请求参数        param              按名称存储请求参数的主要值的 Map 类 
                paramValues        将请求参数的所有值作为 String 数组存储的 Map 类 
请求头          header             按名称存储请求头主要值的 Map 类 
                headerValues       将请求头的所有值作为 String 数组存储的 Map 类 
Cookie          cookie             按名称存储请求附带的 cookie 的 Map 类 
初始化参数      initParam          按名称存储 Web 应用程序上下文初始化参数的 Map 类 
4:Taglib 伪指令
  用于 JSTL core 库 EL 版本的 taglib 伪指令
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
实际上,对应于 JSTL core 库的 taglib 伪指令有两种,因为在 JSTL 1.0 中,EL 是可选的。所有四个 JSTL 1.0 定制标记库都有使用 JSP 表达式(而不是 EL)指定动态属性值的备用版本。因为这些备用库依赖于 JSP 的更传统的请求时属性值,所以它们被称为 RT库,而那些使用表达式语言的则被称为 EL 库。开发人员用不同的 taglib 伪指令来区分每个库的这两个版本。清单 8 显示了使用 core 库的 RT 版本的伪指令。但是,由于现在我们讨论的重点是 EL,所以首先需要这些伪指令。
   用于 JSTL core 库 RT 版本的 taglib 伪指令
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c_rt" %>
5:变量标记
<c:set> 操作的语法
  <c:set var="name" scope="scope" value="expression"/>
<c:set> 操作示例
  <c:set var="timezone" scope="session" value="CST"/>
  <c:set var="square" value="${param['x'] * param['x']}"/>
通过主体内容指定 <c:set> 操作的值
  <c:set var="timezone" scope="session">CST</c:set>
 
<c:remove> 操作示例 <c:remove var="timezone" scope="session"/>

scope 属性是可选的,其缺省值是 page 。

 

循环的使用
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<c:if test="${fn:length(siteList)>0}">
<table width="100%" border="0" cellspacing="1" cellpadding="1">
  <tr bgcolor="98B1C8">
   <td width="5%">编号</td>
    <td width="5%">选择</td>
    <td>BSC编号</td><td>PCU编号</td><td>基站编号</td>
    <td>负荷</td>
  </tr>
  <c:forEach items="${siteList}" var="obj" varStatus="status">
  <tr bgcolor='${status.index%2==0?"#D8EBCF":"#F2F6FB" }'>
   <td>${status.count}</td>
    <td><html:multibox property="siteArray" value="${obj.site}"
    styleId="cbx_${obj.nsei}"  title="${obj.bsc}" οnchange="checkCbx(this)" οnclick="checkCbx(this)" /></td>
    <td>${obj.bsc }</td><td>${obj.nsei }</td><td>${obj.site }</td>
  </tr>
  </c:forEach>
</table>
</c:if>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值