Thymeleaf中如何通过JavaScript变量键访问Map值?
问题分析与解决方案
你的问题核心在于服务端模板渲染和客户端JavaScript执行的时机差异:
模板引擎的[[${...}]]表达式是在服务端渲染页面时执行的,这时候客户端的JavaScript变量key还未创建,所以mod.get(key)会把key当成服务端上下文里的字符串(而非客户端变量)去查询,自然拿不到对应值。
正确实现方式
把服务端的Map直接序列化为JavaScript对象,客户端就能用JS变量键正常访问:
// 通过模板引擎将服务端Map转为JSON格式字符串,注入到JS中 var modMap = [[${#json.toJson(mod)}]]; var key = "sam"; var bar = modMap[key]; // 此时bar的值为"NY",可正常获取
注意事项
不同模板引擎的JSON序列化语法略有区别:
- 若使用Thymeleaf,
#json.toJson(mod)是正确写法; - 若使用Freemarker,需用
<#assign modJson = mod?eval_json>这类语法; - 核心逻辑都是将服务端Map转换为客户端可识别的JavaScript对象结构。
原写法失效原因
原代码里的[[${mod.get(key)}]]在服务端执行时,key并非客户端的JS变量,而是服务端环境中的变量(若服务端未定义key,会直接返回空或报错),完全无法获取客户端运行时的key值,因此bar会处于未定义状态。
内容的提问来源于stack exchange,提问作者chris01
相关产品推荐
相关产品推荐

