JS中使用EL表达式

感谢原文作者:limeiky
原文链接:https://www.cnblogs.com/limeiky/p/5321423.html

EL(Expression Language)表达式

EL(Expression Language)表达式的主要作用是访问存放在某个范围中的值, 将值的内容(或者值的属性值)打印到JSP页面,所以说运用EL的最终目的就是:将范围中的值打印到JSP页面

EL目的:为了使JSP写起来更加简单,使JSP页面尽可能少的存在JAVA代码!

EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指能够在 JSP 页面中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。JSP 2.0 将 EL 表达式添加为一种脚本编制元素,脚本编制元素:就是编写脚本的元素,就是编写JAVA代码的元素,在这里EL替代了JAVA代码的作用

JavaBean与EL表达式:

脚本编制元素EL:使用EL表达式可以简洁地读出JavaBean的属性值

js中使用EL表达式,分两种情况

  1. JS代码在JSP页面中, 这可以直接使用EL表达式. 如:
  1. JS代码是单独的.js 文件, 通过引入到 JSP中来,这时候可通过提前定义JS变量的形式的解决,如:
<c:set var="contextPath" value="${pageContext.request.contextPath}" scope="application"/>  
<script>  
<%--JS gloable varilible--%>  
var contextPath = "${contextPath}";  
</script>  

在JSP页面上定义JS变量 contextPath.

这样在之后引入的JS文件中就可以使用contextPath变量了.

//Image setting  
config.filebrowserImageUploadUrl = contextPath + "/ckeditor/upload.htm";  

另一个例子,用js控制,用到了el表达式,最开始源码如下:

Java代码

var selected = ${requestScope.xxxxForm.recordNumPerPage}  

,这样始终js错误,因为在第一次的时候requestScope.xxxxForm.recordNumPerPage为null。于是在boss的指导下,简单的加了两个引号,代码变成

Java代码

var selected = “${requestScope.xxxxForm.recordNumPerPage}

,ok,功能自动实现。

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

原因

引自链接:https://www.cnblogs.com/jpfss/p/9155880.html

el表达式(运用el表达式直接获取值时,例如,msgmsgsetgetuser.namenamesetgetjspjseljsELJSTLjseljsjselel{msg},不需要为msg提供set get方法;但是当获取对象的属性值时,例如,user.name,则必须为name属性提供set get方法)是jsp相关的概念,是在服务端执行的,服务端执行完成后再传给客户端浏览器,js是在客户端浏览器执行的,el在js前就已经被执行了。EL、JSTL以及其他各种标签是在服务端执行好后再通过网络传送给客户端,浏览器客户端收到后才会执行其中的js脚本。也就是说,el表达式生效的时候js代码还全都是文本,等js生效的时候早就没了el表达式了,你可以在浏览器中查看源代码,你就会发现el标签{}全没了,都转化为具体的值了。jsp和js不是一个平面上的东西,它们不可能在同一个时刻同时执行,它们没有任何交叉点。所以标题中“使用”两个字采用双引号,并不是js真正地使用el表达式,而是使用el表达式最终转化的值。

类似的,对于js中“使用”java代码,与使用el表达式是一个道理:JSP是先进行编译把java代码都编译出来形成一张完整的页面再发到客户端,js只是在客户端执行,等到js执行的时候其实js已经看不到java代码了。

原文地址:https://www.cnblogs.com/tfxz/p/12662424.html