最近做项目时发现原来对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表达式有无双引号的区别的更多相关文章

  1. 关于EL表达式中requestScope和param区别

    今天演示EL表达式的时候发现自己jsp的基础实在是薄弱,在这个很简单的问题上迷惑了很久. 首先在看遇到的问题: 在浏览器地址输入,表示传入一个参数test,值为123 http://localhost ...

  2. settimeout里面函数有无双引号的区别

    在写定时器时很容易搞混,所以记下防止忘记. 双引号中的作用域不捕捉局部变量,不用双引号包着的是捕捉局部作用域 var a = function() { alert(1111) } function a ...

  3. JSP参数传递兼EL表达式

    1.浏览器?方式传递参数 /** 浏览器地址栏输入?方式传递参数 ?test=123 */ 可以用${param.test}方式输出 2.页面内部设置参数setAttribute /** JSP页面中 ...

  4. js 中使用el表达式 关键总结:在js中使用el表达式一定要使用双引号

    js 中使用el表达式 关键总结:在js中使用el表达式一定要加双引号 js控制中用到了el表达式,最开始源码如下: var selected = ${requestScope.xxxxForm.re ...

  5. el表达式跟ognl表达式的区别(转)

    EL表达式: >>单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application.>>如果在struts环境中,它除了有在上面的 ...

  6. 通过EL表达式,后台数据传到前台,引号及后面的数据被截断的问题:

    问题描述: 通过EL表达式,后台数据传到前台,引号及后面的数据被截断的问题: 如: 前端页面: html: 问题解决: 1.一个简单的办法,把 input 写成这样: <input type=& ...

  7. 【转】JSP中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...

  8. jsp中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...

  9. 对于EL表达式和ONGL表达式区别的相关理解

    java程序跑起来之后,会有一个内存空间分配出来,存入用到的值,这个值的周围就是上下文空间,而九大内置对象等,都在这个值的周围放着,像这样: el 就只能获取value stack 周围 的数据,va ...

随机推荐

  1. 对ToString("X2 ")的理解

    /// <summary>        /// 将byte型转换为字符串        /// </summary>        /// <param name=&q ...

  2. .net core 学习笔记(4)-ViewComponent

    动态菜单,以前用的是Html.Action(url)来获取的,到了 .net core 中忽然发现没有了这个方法,原来在 .net core 中是提供了个 ViewComponent,有点类似以前的用 ...

  3. JS弹窗数据带回

    父窗口代码: function selectCar_Team_Info(){ //var url = "<%=basepath_%>ec/jsp/carLoading/carTe ...

  4. C++虚方法(虚函数)随笔

    本文不讨论虚函数的原理,只简单总结下虚函数的常用事项. 虚函数(虚方法)是C++动态联编 实现多态的重要手段,在函数声明时使用关键字virtual即可,如: virtual void func(voi ...

  5. 总结:视频播放的四种实现方案(Native)

    一.来自 AVFoundation的 AVPlayer对象 特点: 1. AVPlayer     > 优点:          可以自定义UI, 进行控制     > 缺点:      ...

  6. ARM9的中断控制器

    简要复习一下ARM9中断控制器的控制过程: 1.首先能识别触发的中断(对应中断源必须打开,然后查询当前中断状态寄存器),硬件会操控PC跳到中断向量入口(IRQ_HANDLE,硬件控制的只要是IRQ中断 ...

  7. 查看外网出口IP && Traceroute

    一.CentOS 查看外网出口IP 1---------------- # curl ifconfig.me 2----------------# curl icanhazip.com 二.Trace ...

  8. jQuery外部框架浅析

    (function(window, undefined) {         var jQuery = ...         ...             window.jQuery = wind ...

  9. SVN的部署及分支等方法

    1.本地Repository的创建 repository的创建很简单,假设我要在D:\TortoiseSVN\TestRepository目录中创建repository,只需 右键TestReposi ...

  10. sphinx 注意点

    强制更新索引indexer --all --rotate合并索引indexer --merge index1 index2 --rotate No fields in schema - will no ...