浅谈EL
一、了解EL
1、EL是从 JavaScript 脚本语言得到启发的一种表达式语言,它借鉴了 JavaScript 多类型转换无关性的特点。在使用 EL 从 scope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。 Web 服务器对于 request 请求参数通常会以 String 类型来发送,在得到时使用的 Java 语言脚本就应该是 request.getParameter(“XXX”) ,这样的话,对于实际应用还必须进行强制类型转换。而 EL 就将用户从这种类型转换的繁琐工作脱离出来,允许用户直接使用 EL 表达式取得的值,而不用关心它是什么类型。
2、EL的功能:
- 可以访问jsp中不同域的对象
- 可以访问JavaBean中的属性
- 可以访问集合元素
- 可以支持简单操作符运算
二、EL变量
1、EL存取变量数据的方法很简单,例如:${goodsList}。它的意思是取出某一范围中名称为username的变量。 因为我们并没有指定哪一个范围的goodsList,所以它会依序从Page、Request、Session、Application范围查找。假如途中找到goodsList,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。假如goodsList是一个集合对象,则该集合中的对象的属性可以通过点或者[]获取其属性值。例如该集合存放的是goods对象,而goods对象中有name 和id属性。用jstl标签forEach
获取集合对象时:<c:forEach items="${goodsList}" var = "goods">, 则可以通过${goods.id},${goods.name}来获取属性值。通过该方法获取时goods类必须有get方法如果没有就会出现javax.el.PropertyNotFoundException: Property 'goodPhoto' not found on type java.lang.String错误,具体参考该博文
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的更多相关文章
- 浅谈EL与JSTL
讲道理,自己在博大精深的Java世界里还只是一个很小很小的菜鸟.处于成长与学习之中,但学习一个漫长的过程.尤其对于那些知识点我觉得总结是尤为重要的.反正在我看来这段时间里虽然过了很多知识但却是一脸懵逼 ...
- 浅谈Vue.js
作为一名Vue.js的忠实用户,我想有必要写点文章来歌颂这一门美好的语言了,我给它的总体评价是“简单却不失优雅,小巧而不乏大匠”,下面将围绕这句话给大家介绍Vue.js,希望能够激发你对Vue.js的 ...
- 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore
本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...
- 浅谈padding
浅谈padding padding是CSS盒子模型的一部分,代表盒子模型的内边距. 用法 padding属性有四个值,分别代表上.右.下.左的内边距. .box { padding: 10px 5px ...
- 前端性能优化--为什么DOM操作慢? 浅谈DOM的操作以及性能优化问题-重绘重排 为什么要减少DOM操作 为什么要减少操作DOM
前端性能优化--为什么DOM操作慢? 作为一个前端,不能不考虑性能问题.对于大多数前端来说,性能优化的方法可能包括以下这些: 减少HTTP请求(合并css.js,雪碧图/base64图片) 压缩( ...
- 浅谈Vue下的components模板
浅谈Vue下的components模板在我们越来越深入Vue时,我们会发现我们对HTML代码的工程量会越来越少,今天我们来谈谈Vue下的 components模板的 初步使用方法与 应用 我们先来简单 ...
- 浅谈Vue中计算属性(computed)和方法(methods)的差别
浅谈Vue中计算属性(computed)和方法(methods)的差别 源码地址 methods方法和computed计算属性,两种方式的最终结果确实是完全相同 计算属性是基于它们的响应式依赖进行缓存 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
随机推荐
- 这个发现是否会是RSA算法的BUG、或者可能存在的破解方式?
笔者从事各种数据加解密算法相关的工作若干年,今天要说的是基于大数分解难题的RSA算法,可能有些啰嗦. 事情的起因是这样的,我最近针对一款芯片进行RSA CRT解密的性能优化.因为期望值是1024bit ...
- iOS-桥接方式
很多时候都会使用到CoreFoundation的函数,其返回值为CoreFoundation框架的对象,如果想转换为Foundation框架的对象就可以使用桥接方式来搞定. 示例代码: CFStrin ...
- [JQuery] Ajax使用过程中的问题总结
JQuery提供的ajax函数,在使用过程中,因为对参数的不了解,导致了很多错误,现在总结如下,以便时常温固,不犯同样的错误. 1.我在项目中使用到的ajax请求格式如下: $.ajax({ url: ...
- Biztalk AS2开发经验总结
一. 准备证书 4 1. 升级win2008 R2证书服务 4 2. 申请证书 6 二. 配置证书 13 1. 为AS2配置证书 13 2. ...
- MiniProfiler工具介绍
MiniProfiler是一款针对.NET, Ruby, Go and Node.js的性能分析的轻量级程序.可以对一个页面本身,及该页面通过直接引用.Ajax.Iframe形式访问的其它页面进行监控 ...
- Asp.net mvc 知多少(七)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- Linux下connect超时处理【总结】
1.前言 最近在写一个测试工具,要求快速的高效率的扫描出各个服务器开放了哪些端口.当时想了一下,ping只能检测ip,判断服务器的网络是连通的,而不能判断是否开放了端口.我们知道端口属于网络的应用层, ...
- linux中的软连接和硬连接
1. 创建软连接的方法 ln -s /path/to/original /path/to/linkName 当我们对软连接文件进行修改后,对应的修改也会反映到原始的文件(反之亦然). 当我们删除软连接 ...
- Entity Framework Code First约定
Code First使你能够通过C# 或者 Visual Basic .NET来描述模型,模型的基本规则通过使用约定来进行检查,而约定就是一系列内置的规则. 在Code First中基于类的定义通过一 ...
- BZOJ 3401: [Usaco2009 Mar]Look Up 仰望(离线+平衡树)
刷银组刷得好开心= = 离线按权值排序,从大到小插入二叉树,查找树中比这个数大的 CODE: #include<cstdio>#include<iostream>#includ ...