最近做项目时发现原来对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. SQL Server中查询某个数据库中表的个数

    --SQL Server中 数表: SELECT * FROM SYSOBJECTS WHERE xtype = 'U'; SELECT COUNT(*) FROM SYSOBJECTS WHERE ...

  2. A problem about rcssserver3d

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

  3. Windows 8.1 with Update MSDN 简体/英文/繁体

    PS:请不要使用离线下载,以免镜像损坏! 1.CN: 文件名:cn_windows_8.1_enterprise_with_update_x64_dvd_4048578.isoSHA1:2D9BFE9 ...

  4. Directory 与 DirectoryInfo 的区别

    Directory 与 DirectoryInfo 这两个能够实现大多数相同的功能.区别可分为两点:一.静态与实例调用前者必须被实例化后才能使用,而后者则只提供了静态的方法.如果多次使用某个对象一般使 ...

  5. 回头再看N层架构(图解)

    不知不觉来博客园已经快两半了,时间过的真快. 这次的目标是再回顾一下传统的N层架构并且分析一下在DDD中的N层架构. 一.先来看一看传统的N层架构 N-层架构的出现,主要是由于观注点的分离而产生,这三 ...

  6. 单例模式(Java)

    //单例模式 public class Singleton { private static Singleton s; private Singleton(){ } public static Sin ...

  7. No.2 CAS之SPNEGO+LDAP认证配置

    1.概述 本文先配置了SPNEGO认证,就是如果用户操作系统如果登陆了公司的Windows域,用户浏览器访问应用服务即可免登录. 然后如果不在域里的员工,用LDAP认证方式,输账号密码登陆. 参考文档 ...

  8. 深入理解css系列:css定位

    一.概述 1.默认文档流定位方式 (1).HTML默认文档以流模式定位,即内容元素按照先后顺序依次上下定位: (2).HTML标签元素总体分为块状元素.内联元素.内联块状元素,可通过该标签对应的DOM ...

  9. SPM Homework 1 —A Project From My Personal Life

    我所完成的一个项目是上学期WEB的期末作业. 项目本质:使用Java Web编写一个网上银行系统,并实现老师所给的几项要求:分角色2015登陆.开户.存取款.转款.查看明细等. 最初目标:能够完成所有 ...

  10. -webkit-appearance、sselect

    -webkit-appearance 是一个 不规范的属性(unsupported WebKit property),用来改变按钮和其他控件的外观,使其外观类似于原生控件. iOS下的safari中有 ...