You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:20:46