`

jsp El 表达式(温故而知新)

    博客分类:
  • jsp
jsp 
阅读更多

EL表达式
关键字:   jsp   

the JavaServer Pages Standard Tag Library (JSTL)
JSP Standard Tag Library (JSTL)
EL(expression language)表达式

EL 表达式的格式是这样的:用美元符号($)定界,内容包括在花括号({})中。
清单 1. 说明 EL 表达式定界符的 JSTL 操作
<c:out value="${user.firstName}"/>;
此外,您可以将多个表达式与静态文本组合在一起以通过字符串并置来构造动态属性值,如清单 4 所示。单独的表达式由标识符、存取器、文字和运算符组成。标识符用来引用存储在数据中心中的数据对象。EL 有 11 个保留标识符,对应于 11 个 EL 隐式对象。假定所有其它标识符都引用限制了作用域的变量。存取器用来检索对象的特性或集合的元素。文字表示固定的值 — 数字、字符、字符串、布尔型或空值。运算符允许对数据和文字进行组合以及比较。
清单 2. 组合静态文本和多个 EL 表达式以指定动态属性值
<c:out value="Hello ${user.firstName} ${user.lastName}"/>;
隐式对象
表 1 中列出了 11 个 EL 隐式对象的标识符。不要将这些对象与 JSP 隐式对象(一共只有九个)混淆,其中只有一个对象是它们所共有的。

表 1. 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 类

尽管 JSP 和 EL 隐式对象中只有一个公共对象(pageContext),但通过 EL 也可以访问其它 JSP 隐式对象。原因是 pageContext 拥有访问所有其它八个 JSP 隐式对象的特性。实际上,这是将它包括在 EL 隐式对象中的主要理由。

其余所有 EL 隐式对象都是映射,可以用来查找对应于名称的对象。前四个映射表示先前讨论的各种属性作用域。可以用它们来查找特定作用域中的标识符,而不用依赖于 EL 在缺省情况下使用的顺序查找过程。

接下来的四个映射用来获取请求参数和请求头的值。因为 HTTP 协议允许请求参数和请求头具有多个值,所以它们各有一对映射。每对中的第一个映射返回请求参数或头的主要值,通常是恰巧在实际请求中首先指定的那个值。每对中第二个映射允许检索参数或头的所有值。这些映射中的键是参数或头的名称,但这些值是 String 对象的数组,其中的每个元素都是单一参数值或头值。

cookie 隐式对象提供了对由请求设置的 cookie 名称的访问。这个对象将所有与请求相关联的 cookie 名称映射到表示那些 cookie 特性的 Cookie 对象。

最后一个 EL 隐式对象 initParam 是一个映射,它储存与 Web 应用程序相关联的所有上下文的初始化参数的名称和值。初始化参数是通过 web.xml 部署描述符文件指定的,该文件位于应用程序的 WEB-INF 目录中。
最终,EL 还包括了几个用来操作和比较 EL 表达式所访问数据的运算符。表 2 中汇总了这些运算符。

表 2. EL 运算符

类别 运算符
算术运算符 +、-、*、/(或 div)和 %(或 mod)
关系运算符 ==(或 eq)、!=(或 ne)、<</code>;(或 lt)、>;(或 gt)、<=(或 le)和

>;=(或 ge)
逻辑运算符 &&(或 and)、||(或 or)和 !(或 not)
验证运算符 empty
清单 3. 利用算术运算符的 EL 表达式
${item.price * (1 + taxRate[user.address.zipcode])}
清单 4. 利用关系和逻辑运算符的 EL 表达式
${(x >;= min) && (x <= max)}
表 3. EL 运算符优先级(自顶到底,从左到右)

[], .
()
unary -、not、!、empty
*、/、div、%、mod
+、binary -
() <</code>;、>;、<=、>;=、lt、gt、le、ge
==、!=、eq、ne
&&、and
||、or
清单 5. 用于 JSTL core 库 EL 版本的 taglib 伪指令
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>;
?

这个问题一般是由于你使用的jstl版本造成的。
你的页面应该会包含如下代码:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
这是最新版的jstl 1.1路径,而如果你使用的是旧版1.0的则需要把路径中的jsp去掉,如下:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
掌握EL表达式
关键字:   Tag标签   
EL脚本语言的配置和支持:
对于一个单个JSP页面,你可以使用定义page指令来设置jsp页面是否支持EL。默认是支持EL(如果要页面不支持EL,请设置为isELIgnored=true;

    <%@ page isELIgnored="true|false"%>


    对于整个JSP应用程序,要修改WEB.XML配置(tomcat5.0.16默认是支持EL的);
    〈jsp-property-group>
    〈description> For config the ICW sample application 〈/description>
    〈display-name>JSPConfiguration 〈/display-name>
    〈url-pattern>/jsp/datareset.jsp 〈/url-pattern>
    〈el-ignored>true< / el-ignored> 〈 / el-ignored>
    〈page-encoding>ISO-8859-1〈/page-encoding>
    〈scripting-invalid>true〈/scripting-invalid>
    〈include-prelude>/jsp/prelude.jspf〈/include-prelude>
    〈include-coda>/jsp/coda.jspf〈/include-coda>
    〈/jsp-property-group>


    算术运算符演示:
    以下是EL运算符列表,其中empty可以检查某个值是否为空

    运算符

说明 运算符 说明

+



> 或 gt 大于

-



<= 或 le 小于等于

*



>= 或 ge 大于等于

/ 或 div



&& 或 and 逻辑与

% 或 mod


模(求余)
|| 或 or 逻辑或

== 或 =


等于
! 或 not 逻辑非

!=


不等于
empty 检查是否为空值

< 或 lt


小于
a ? b : c 条件运算符

    EL表达式使用简单,在网页中"${}"表示是EL表达式。${1+1} 显示为 2

    EL算术表达式

运算结果 EL 关系运算表达式 运算结果
${1} 1 ${1 < 2} true
${1 + 2} 3 ${1 lt 2} true
${1.2 + 2.3} 3.5 ${1 > (4/2)} false
${-4 - 2} -6 ${4.0 >= 3} true
${21 * 2} 42 ${4.0 ge 3} true
${10%4} 2 ${100.0 eq 100} true
${10 mod 4} 2 ${(10*10) != 100} false
${(1==2) ? 3 : 4} 4 ${(10*10) ne 100} false



    隐含对象数据演示:
    EL 表达式定义了11个隐含对象,使用这11个对象可以很方便的读取到session,cookie,HttpHeader,用户提交表单(param)等

    隐含对象



内容

applicationScope


应用程序范围内的scoped变量组成的集合

cookie


所有cookie组成的集合

header


HTTP请求头部,字符串

headerValues


HTTP请求头部,字符串集合

initParam


全部应用程序参数名组成的集合

pageContext


当前页面的javax.servlet.jsp.PageContext对象

pageScope


页面范围内所有对象的集合

param


所有请求参数字符串组成的集合

paramValues


所有作为字符串集合的请求参数

requestScope


所有请求范围的对象的集合

sessionScope


所有会话范围的对象的集合

    下面是获取HTTP访问头部数据和用户提交数据的示例

    EL表达式

运算结果
${header["host"]}
这里得到HTTP连接头部的host值
${header["accept"]} 这里获得HTTP头部的accept值
${header["user-agent"]} 这里获得HTTP头部的user-agent值
以下可以读取用户提交的信息,假设用户提交信息为 ?name=myname&alies=now.net.cn(这里有两种访问方式,一种是使用[]来进行访问,另外一种是使用.来进行访问,两种访问效果是一样的。)
${param["name"] } myname
${param.name} myname
${param["alies"] } now.net.cn
${param.alies} now.net.cn
eg: ${empty(requestScope.backpath)?'admin_TcAction.do?method=findFinish':requestScope.backpath}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics