首页 > 代码库 > 浅谈EL
浅谈EL
一、了解EL
1、EL是从 JavaScript 脚本语言得到启发的一种表达式语言,它借鉴了 JavaScript 多类型转换无关性的特点。在使用 EL 从 scope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。 Web 服务器对于 request 请求参数通常会以 String 类型来发送,在得到时使用的 Java 语言脚本就应该是 request.getParameter(“XXX”) ,这样的话,对于实际应用还必须进行强制类型转换。而 EL 就将用户从这种类型转换的繁琐工作脱离出来,允许用户直接使用 EL 表达式取得的值,而不用关心它是什么类型。
2、EL的功能:
- 可以访问jsp中不同域的对象
- 可以访问JavaBean中的属性
- 可以访问集合元素
- 可以支持简单操作符运算
二、EL变量
1、EL的表达式:${expression} 例如:${param.name} 它等同于 <%=request.getParameter("name") %>
2、EL的变量。
①EL的隐式变量包括pageScope,requestScope,sessionScope,applicationScope,任何再起作用与范围内的JavaBean的实例都可以当作EL来表达。
< % request.setAttribute("age",20) ; session.setAttribute("name","yang");%>//调用其变量${requestScope.age}${sessionScope.age}
②隐含变量param、paramValues,param是取得某一个参数,paramValues失去的某个参数的集合(即为表单中数个控件的name值相同,传过来的是一个参数数组)。例如:表单传过3个参数名同为firstName的参数分别为yang,wang,li。当参数传过来以后存储在paramValue数组中可以通过 ${paramValue.firstName[1] } 获得姓氏为wang的参数。简单演示如下
<html> <body> <form action="name.jsp"> <input type="text" name="firstName" value="yang"> <input type="text" name="firstName" value="wang"> <input type="text" name="firstName" value="li"> <input type="text" name="secondName" value="bo"> <input type="submit" value="Submit">
<!--获取相应参数的方法
${paramValue.firstName[1] }
${param.secondName }
-->
</form> </body> </html>
③其他变量。诸如header,headerValue,cookie,initParam,pageContext等使用与上边两种相同
注意:除过pageContext其与变量都是映射值
三、EL ( .)与[]使用
1、(.)的使用
(.)的左边必须是一个映射值也可以是一个bean得性质(如果第一个变量是javabean的属性)。点号右边必须符合命名规则必须以字母、_或$开头,如上边给出的代码映射键均可以通过点号获取其映射值。只有当左边是映射键或者bean属性时才可以用点号,另一种el的使用方式将更加灵活。
2、[]能让你有更多的选择,比如是一个数组,list,或map的一个值(其键对应的值可能不符合命名规则此时只能用该形式)。下面将展示几种[]的用法以及所要注意的点
①对数组使用[]
<% String name[] = {yang, wang, li, han}; request.setAttribute("name", name); %> 第一个姓氏为:${name } <!-- 返回一个Stirng数组的toString值 --> 第一个姓氏为:${name[0] } <!-- 其值为yang --> 第一个姓氏为:${name["0"] } <!-- 同样显示值为yang -->
你可能会问为什么一个加引号一个不加引号为什么会得出相同的值?
原因在于List和String中的索引会强制转化为int
②对于bean和数组点号和[]都可以使用
③当[]中没有引号时即不是String直接量时会进行计算,搜索与该名字绑定的属性,并替换为该属性的值。下面来一一小段代码进行演示
<% HashMap name = new HashMap(); name.put("zhang", "san"); name.put("li", "si"); name.put("wang", "mazi"); request.setAttribute("name", name); request.setAttribute("li", "zhang"); %> 姓李的人为: ${name["li"] } <!-- 获得值为si --> 姓李的人为: ${name[li] } <!-- 获得的值为san --> <!-- 第二个参数li没有引号,则搜索与该值绑定的属性的值,与其绑定的值为zhang,故zhang会替换li,所以最终获得的值为san -->
注意:el中都是表达式,可以是嵌套表达式,深度不限。可以将一个复杂表达式放在另外一个复杂表达式
四、禁用EL
EL是在JSP2.0以后才有的新特性,因此将JSP版本设置为较低时(Servlet2.3或者更早)其将不再支持EL标签
在单个页面禁用使用如下命令
<%@page isELIgnoreD = "true" %>
浅谈EL