最近做项目时发现原来对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. A problem about rcssserver3d

    When I enter rcssserver3d to the terminal, the system told me this problem: (SimulationServer) SimCo ...

  2. python 异常处理学习笔记

    搬运至慕课网,精华截图,视频链接在这  : http://www.imooc.com/learn/457 1. 异常检查目的 2. python 可能出现的异常 3. 异常的处理过程 try - ex ...

  3. Pressure-sensitive pores scattered

    Some researchers take issue with this however - a shark's vision is too good and its sense of smell ...

  4. Ibatis动态拼装sql,常用标签总结及举栗子。

    今天得到项目经理一项任务,就是拼装sql,第一次见到,不是太懂,赶紧回来睡一觉再说,由于这次的项目orm使用的是ibatis框架,所以需要使用动态拼装sql,或者是ognl语言,这门语言不是专属于ib ...

  5. Which ports are considered unsafe on Chrome

    1, // tcpmux 7, // echo 9, // discard 11, // systat 13, // daytime 15, // netstat 17, // qotd 19, // ...

  6. 如何修复Outlook 2007源文件.PST及性能优化补丁

    kb961752 微软发布了改善 Outlook 2007 个人数据文件性能的补丁,该补丁未来将会集成于 SP2 中,但是现在对于SP1用户可以提前得到它.   获取地址: http://suppor ...

  7. 一些Layout的坑。坑死我自己了

    iOS这个东西,初学感觉,还好还好,然后一年之后再来修复一下初学的时候的代码,我只是感觉头很晕- - 别扶我. AutoLayout的坑,明明以前都没有的!!!升了iOS10就突然发现了这个坑,其实也 ...

  8. putty连接报NetWork error:connection refused

    首先通过物理终端进入到linux上,手工检查ssh发现没运行 /etc/init.d/sshd status 使用rpm -V 命令可检查到ssh的软件包正常 /rpm -V openssh-serv ...

  9. 安全协议系列(三)----CCMP与WPA-PSK

    本节讨论 CCM 在 WiFi 中的实际应用 -- CCMP 协议 根据 RFC 3610,完成 CCMP 报文的加解密,需要提供:分组密钥(K).随机数(Nonce).附加认证数据(AAD),这三个 ...

  10. 初学Spring

    Spring是当今最流行的框架,今天开始,dayday同学要正式开始学习Spring了,加油 以下是一个简单的应用Spring框架的java程序 src\dayday\HelloSpring.java ...