一、问题场景
前几天在写jsp的时候遇到这样一个问题——当jsp页面引入了一个外部js文件时,在jsp页面中通过EL表达式取值,然后向外部js传值却不成功。
比如在jsp中如下所示:
<script>
var value = '${a.value}'
</script>
在外部js中如下所示:
<script>
let v = value
</script>
采用这种方式是无法在外部 js 文件中获取到 value 值得,原因在于 jsp 对 js 文件的处理在客户端(浏览器)完成,这样导致了外部 js 文件无法在服务器对 jsp 进行处理时获取 value 值,而当 jsp 被处理为静态的 html 返回到客户端(浏览器)时,显然 value 值已失效(EL表达式失效),所以整个过程中外部 js 文件都获取不到 value 。
二、解决方案
这里提供两种解决方案:隐藏域传值和 js 文件改为 jsp 文件。
1、隐藏域传值
jsp 中代码如下:
<input type = 'hidden' id = 'value' name = 'value' value = '${a.value}'></input>
js 文件中代码如下:
<script>
let v = document.getElementById('value').value;
</script>
2、js 文件改为 jsp 文件
直接将外部 js 文件的文件扩展名改为.jsp 即可。注意:jsp 文件中对 js 外部文件的引用中也要修改文件扩展名为.jsp,如下:
<script src = '外部 js 文件.jsp' type = 'text/javascript' ></script>
PS:聪明的同学可以思考一下两种解决方案的思路分别是什么。
以上
版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/2ca99c01532b