Freemarker(Responsys RPL变体)解析执行表中键值对问题求助
Freemarker动态赋值问题修复
代码存在4个核心问题:
- 变量声明语法错误:首行定义
fruit_list时缺少<#assign>关键字,Freemarker无法识别该自定义变量声明,代码直接报错。 - 多余的字符串转换操作:
"${FOOD}"!的写法冗余,FOOD本身是字符串类型,直接调用FOOD?split(":")即可完成拆分,无需额外转成字符串字面量处理。 - 赋值语句拼接逻辑错误:你将值部分用单引号包裹,导致
${my_fruit}被识别为普通字符串,不会触发内部变量解析,最终得到的fruit值是字符串"${my_fruit}"而非预期的"banana"。 - 多余的
?exec调用:?interpret返回的是可直接调用的模板指令对象,使用<@fruit_int />即可执行,无需额外追加?exec。
正确实现方案
方案1(更简洁,无需生成动态指令)
Freemarker原生支持动态变量名赋值,直接按如下写法即可实现需求:
<#-- 你已有的前置定义 --> <#assign my_fruit = "banana"> <#assign FOOD = "fruit:${my_fruit}"> <#-- 核心逻辑 --> <#assign fruit_list = FOOD?split(":")> <#assign var_name = fruit_list[0]> <#-- 先解析值部分的变量表达式,再赋值给动态变量名 --> <#assign var_value = fruit_list[1]?interpret> <#assign "${var_name}" = var_value>
执行完成后fruit变量的值就会是banana。
方案2(沿用你原本的动态指令生成写法,仅修正错误)
<#assign fruit_list = FOOD?split(":")> <#-- 拼接时不要给值部分加单引号,保证变量表达式正常解析 --> <#assign fruit_raw = "<#assign " + fruit_list[0] + " = " + fruit_list[1] + ">"> <#assign fruit_int = fruit_raw?interpret> <@fruit_int />
内容的提问来源于stack exchange,提问作者ikonoklast
相关产品推荐
相关产品推荐

