EL表达式有无双引号的区别
最近做项目时发现原来对EL表达式理解太浅,通过一个springMVC项目,加深了对其的理解,下面总结一下,如发现有不对之处,请批评指正:
1.在单独的js文件中,EL表达式无效,如:var type="${type}",此时type获取的值就为字符串“${type}”,而并非后台type指向的值;非要单独的JS文件中获取El值的话,可在jsp中定义一个全局变量var type,且加上$(function(){ type="${type}" });此时在单独的JS文件中就可以获取type指向的值了;当然,如果把所有的JS代码写到JSP中就更可以了(猜想:EL表达式在服务器端生成值并替换JSP中的El时,不对单独的JS文件进行扫描,只对jsp中的JS代码进行了扫描,所以在JS文件中无效,而在JS代码中有效,该猜想没有证实!);
2.单独的js文件中,EL表达式无效,即使一定要用它,也必须用双引号或单引号引起来,不然就会报错;
3.之前经常看到有人说js是客房端的,EL是服务端的,不能在js中使用EL表达式----真是扯淡,EL表达式作为服务器端的变量在返回到客户端的时候已经被显示成变量内容,所以在那都是可以使用的,只是要正确的使用它!如果使用不对,就会出错!如在jsp中的js代码部分写入 var aa=${type},alert(aa),虽然controller从后台传入type="add",但运行到浏览器时就会报错“add”未定义,仔细查看页面错误代码发现var aa=add,而add没有定义,顾报此错误;再进一步分析,EL表达式在服务端就执行完毕,在服务端运行时,后台会扫描EL表达式,并把值替代EL表达式,所以此时var aa=${type}变为var aa=add,如果后台传入type=1时;前台就变为var aa=1;alert(aa),此时没有错误;如果后台没有传type值时,var aa=${type}变为var aa=,直接报错,而如果在EL表达式中加入双引号,再后台运行,var aa="${type}"变为var aa="add",所以在Js代码中使用EL表达式不一定非要加上双引号了,如果后台传入的字符串时,则需要加上双引号,如果是数字时,则加与不加,视情况而定,加了双引号,就变为字符型,没加,则为数字型,如果后台传入集合时,请参照下述;
4.在JS代码中获取集合或数组元素时,EL表达式引用双引号,前端自动将其转换为一个JSON字符串形式,如果不加,其值为一个变量,区别非常大,例如后台传值List<String> alist,alist中有两个值1、2,前端var aa=“${alist}”,则aa是一个值为“[1,2]”,length为5的字符串的变量,aa[0]的值是“[”,而如果var aa=${alist}时,则aa为一个1、2的数组变量,其length为2,此时aa[0]为值是1;进一步,以后如果想通过el表达式获取集合元素时,一种方法:
var aa=${alist};for(int i=0;i<aa.length;i++){ var b=aa[0]};
另一种方法:
for(int i=0;i<${fn:length(alist)};i++){var b=${alist[i]}
所以此时,如果后台没有传入alist,前台将报错,而如果加上双引号,也可以获取集合值,但会额外获取一些诸如“[”,",","","]"等垃圾值;
所以在js代码中使用el表达式时不一定非要加上双引号,只能视情况而定。
EL表达式有无双引号的区别的更多相关文章
- 关于EL表达式中requestScope和param区别
		
今天演示EL表达式的时候发现自己jsp的基础实在是薄弱,在这个很简单的问题上迷惑了很久. 首先在看遇到的问题: 在浏览器地址输入,表示传入一个参数test,值为123 http://localhost ...
 - settimeout里面函数有无双引号的区别
		
在写定时器时很容易搞混,所以记下防止忘记. 双引号中的作用域不捕捉局部变量,不用双引号包着的是捕捉局部作用域 var a = function() { alert(1111) } function a ...
 - JSP参数传递兼EL表达式
		
1.浏览器?方式传递参数 /** 浏览器地址栏输入?方式传递参数 ?test=123 */ 可以用${param.test}方式输出 2.页面内部设置参数setAttribute /** JSP页面中 ...
 - js 中使用el表达式 关键总结:在js中使用el表达式一定要使用双引号
		
js 中使用el表达式 关键总结:在js中使用el表达式一定要加双引号 js控制中用到了el表达式,最开始源码如下: var selected = ${requestScope.xxxxForm.re ...
 - el表达式跟ognl表达式的区别(转)
		
EL表达式: >>单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application.>>如果在struts环境中,它除了有在上面的 ...
 - 通过EL表达式,后台数据传到前台,引号及后面的数据被截断的问题:
		
问题描述: 通过EL表达式,后台数据传到前台,引号及后面的数据被截断的问题: 如: 前端页面: html: 问题解决: 1.一个简单的办法,把 input 写成这样: <input type=& ...
 - 【转】JSP中的JSTL与EL表达式用法及区别
		
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...
 - jsp中的JSTL与EL表达式用法及区别
		
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...
 - 对于EL表达式和ONGL表达式区别的相关理解
		
java程序跑起来之后,会有一个内存空间分配出来,存入用到的值,这个值的周围就是上下文空间,而九大内置对象等,都在这个值的周围放着,像这样: el 就只能获取value stack 周围 的数据,va ...
 
随机推荐
- 例子:Background Audio Streamer Sample
			
The Background Audio Streamer sample demonstrates how to create an app that uses a MediaStreamSource ...
 - BAT技巧
			
FOR使用 枚举input.txt里的每一行,执行call :dosth %%i(以换行符为分割,默认是空格) for /f "delims=" %%i in (input.txt ...
 - Java重载遇到泛型
			
今天被问到一个有意思的问题,大家都知道重载的概念吧:一个类中定义同名的方法,参数表不同(参数类型,或者参数个数不通): 但是,如果是下面这个两个方法呢 public static int fn(Lis ...
 - PHP下使用强大的imagick轻松生成组合缩略图
			
project: blog target: use-imagick-to-composite-images-thumbnail.md date: 2016-02-19 status: publish ...
 - WebGL如何解决中文文字载入
			
关于WebGL载入中文字体问题,我在网上搜了一下,发现例子并不多,而且只能实现隶书的载入,不支持其他中文字体. 下面是实现的代码: <script src="../js/three.m ...
 - PHP的几个常用函数的使用总结
			
1.date函数:不得不说,PHP的date函数已经基本很完备了,如果你不去读PHP的手册的话,你不会发现对日期做了那么多的支持. time() 获取当前的时间戳 data() 获取自己想要的时间格 ...
 - maven 配置
			
四.eclipse配置maven eclipse---window---maven------User Settings: 之前设置的仓库的位置: 五.idea15配置maven idea14---s ...
 - 第二章  XHTML   基础
			
元素与标签术语,HTML/XHTMLXHTML之间的联系区别在XHTML中,所有元素之间必须完成正确的嵌套,元素必须是闭合的,必须小写.必须有个跟元素HTML. 标题标<h1>语法:< ...
 - Session Tracking Approaches
			
cookies url rewriting hidden field see also: http://www.informit.com/articles/article.aspx?p=29817&a ...
 - JS小总结
			
今天看了一下js的部分总结了一下 函数的定义首先是命名函数function funcName函数还有匿名函数 var funcName = function()普通函数和匿名函数在调用上基本没有什么区 ...