[JS] Java后台使用EL传值给JS文件
来源:互联网 发布:qq企业邮箱绑定域名 编辑:程序博客网 时间:2024/06/05 20:54
- 基础知识
- 作用
- 环境交代
- 背景
- 测试
- 文件MainControllerjava控制器文件
- 文件testjsp视图文件
- 文件cityinfojspjsJS文件
- 输出结果
- 结论
- 注意
- 补充未测试
- 发现
- 使用
基础知识
JavaScript是在客户端中执行,而EL表达式在服务端执行(EL表达式是在JSP中解析),而服务端比客户端先执行,所以在JavaScript文件中是取不到EL值
当然在JSP页面里的<script>标签是可以取到EL值的,所以我们运用此机制,给JS文件传值
作用
后端数据传给JSP时,可以通过用JS变量保存数据,在客户端使用
便于网站的动态动作,不必使用ajax再次获得数据
环境交代
SpringMVC+Spring+Hibernate+JSP+Jquery
背景
JSP文件中 EL表达式的值。在JS文件中 进行保存备份
测试
文件:MainController.java(控制器文件)
作用:Java后端传值给JSP文件(赋值给EL)
@RequestMapping(value = "/test/{id}")public String test(@PathVariable int id,Model model) { Map<CityInfo, Set<CityImg> > cityInfoMap = cityInfoService.getCityInfoList(id); //按id查找信息表 model.addAttribute("cityInfoMap", cityInfoMap); //传到JSP页面 return "test"; //跳转到test.jsp页面}
解释:
一个信息表(CityInfo)里对应多张图片(CityImg)
JSP页面中:${cityInfoMap}为map类型
文件:test.jsp(视图文件)
调用JS文件中的函数,把EL值传给JS文件
文件:cityinfo.jsp.js(JS文件)
定义JS变量与函数接收EL表达式的值
输出cityInfoMap变量,进行查看:
输出结果
输出的字符串不是JSON格式(EL传值给JS变量的值为字符串,此字符串不是JSON格式)
结论
传值方法:
1. JS文件中定义一个全局变量 或 传值函数
//JS文件: var elVar; //方案一:全局变量 function setEl(tmp) { //方案二:传值函数 elVar = tmp; }
2. 在JSP文件<script>标签中对 该变量赋值 或 传值给函数.即可完成传值
//JSP文件: <script language="Javascript"> elVar = "${name}" //方案一:对全局变量赋值。EL表达式必须放在""里 setEl(elVar); //方案二:传值给传值函数 <script>
EL传值:cityinfo.jsp.js(JS文件)中cityInfoMap(变量)获取的EL表达式的值为String类型,此类型不是JSON格式
缺点:
复杂的数据类型不建议使用此方法,其得到string类型不是JSON数据格式,难以转换。可用ajax向后台获取数据
若要使用,可以根据string规律进行解析字符串得到变量
优点:
此方法可适用于简单的数据类型,比如string类型;可以进行数据备份
注意
- EL传值给JS文件时,用JS变量之前一定要先给该变量进行赋值
- 传值所得的JS变量是String类型
- 在script标签内,EL表达式必须放在”“里
补充(未测试)
此想法未测试,请见谅
发现
偶然发现 EL表达式的值 赋值给 JS变量 时
JS变量接收到的字符串,是EL变量类型的toString()方法输出的结果
若要使用该方法在客户端(JS)对服务端数据(EL值)进行备份,可以重写该类型的toString()方法,使变量输出为JSON格式的字符串。
在客户端(JS)部分接收到的数据再调用JSON.parse()方法转为JS变量
使用
重写类的toString()使输出的字符串为JSON格式
Java使用jackson包处理JSON<!-- json --><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.3</version></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version></dependency>
JSON数据转为JS变量
使用JSON.parse(jsonStr)方法转换
- [JS] Java后台使用EL传值给JS文件
- js接收java后台的传值,java后台传值给js
- js使用ajax传值给后台,后台返回字符串处理
- js传递数组给java后台
- 在js文件中使用el表达式中的值
- js文件中使用el表达式问题
- EL表达式在js文件中使用
- js文件中使用el表达式
- js文件中使用el表达式问题
- js文件中如何使用EL表达式
- js上传文件 java后台接收文件
- js上传文件 java后台接收文件
- Vue.js 上传文件(后台使用.net)
- JS 中 使用EL & JSTL 取值
- 给js文件传参数
- 给js文件传参数
- 给js文件传参数
- js传中文给java后台,乱码问题解决
- 【fusionpbx】【websocket】【调试】【心得】【细节】
- Interpolator(插入器)的使用
- mac新建文件夹默认所有人都有读写权限
- 开源许可证
- RandomAccessFile的基本用法
- [JS] Java后台使用EL传值给JS文件
- HDU1021(水)
- LCS及其回溯
- hdoj-2002
- git的使用方法:回退本次commit,提交代码到另一个远程仓库,修改远程仓库地址
- 了解Java的类装载器(static什么时候初始化)
- 导航栏的作用
- tf.nn.relu()--修正线性单元函数
- Javascript 添加删除等元素和导航