Freemarker嵌套变量赋值问题:动态获取嵌套变量值失败求助
解决Freemarker中动态获取嵌套变量的问题
这问题我之前也碰到过,Freemarker确实不允许在表达式内部嵌套${}标记——毕竟${}本身就是用来输出表达式结果的,内部直接写变量或表达式就行。针对你的场景,分两种常见情况给出解决方案:
情况1:regions是哈希(Map)对象,region的值是它的键
如果你的数据结构是类似这样的JSON:
{ "region": "sys", "regions": { "sys": { "username": "abc" } } }
那正确写法是直接在方括号里用region变量(不用加${}),接着访问username属性:
${regions[region].username}
Freemarker会先算出region的值是"sys",再从regions哈希里取出对应的对象,最后拿到它的username属性值。
情况2:变量名本身就是regions[sys]_username格式
如果你的变量是直接以regions[sys]_username作为名称(而非嵌套的哈希结构),那得用Freemarker内置的.vars变量来动态构造变量名并取值:
${.vars["regions[" + region + "]_username"]}
.vars是当前模板上下文的变量映射表,你可以通过字符串拼接生成目标变量名,再用这个字符串键从.vars里取出对应的值。
你原来写的${regions[${region}]_username}之所以报错,就是因为把${}放进了另一个表达式内部,方括号里只需要写合法的Freemarker表达式就可以啦。
内容的提问来源于stack exchange,提问作者Thejaswini
相关产品推荐
相关产品推荐

