动态Freemarker变量名称

rzu*_*ger 2 variables freemarker

我正在尝试使用动态名称设置变量。这意味着我的新变量的名称来自另一个变量:

<#-- in real world I wouldn't declare this variables right here -
     they would come from somewhere else -->
<#assign varName = "myVarName"/>
<#assign varValue = "myVarValue/>

<#... set the variable .../>
Run Code Online (Sandbox Code Playgroud)

这样就可以参考以下值:

${myVarName} <#-- prints "myVarValue" -->
Run Code Online (Sandbox Code Playgroud)

在Java指令中,我将使用

Environment#setVariable(String name, TemplateModel model)
Run Code Online (Sandbox Code Playgroud)

为了达成这个。但是有可能用Freemarker直接实现这一目标吗?

Ale*_*rov 6

我遇到了类似的问题,“ 特殊变量参考”页面为我提供了帮助:

vars:表达式.vars.foo返回与表达式foo相同的变量。如果由于某些原因必须使用方括号语法,则该选项很有用,因为该语法仅适用于哈希子变量,因此您需要一个人工父哈希。例如,要读取一个具有使FreeMarker混淆的陌生名称的顶级变量,您可以编写.vars [“一个陌生名称!”]。或者,要访问具有变量名varName的动态名称的顶级变量,您可以编写.vars [varName]。请注意,.vars返回的哈希值不支持?keys和?values。

就我而言,我只能在模型中使用字符串。我有一堆名字,例如Name1,Name2,... Name10。为了使这些名称成为表格,我使用了以下代码:

<#list 1..10 as x>
<#if .vars["Name" + x]??>
 <tr>
 <td align="center">${.vars["Name" + x]}</td>
 </tr>
</#if>
</#list>
Run Code Online (Sandbox Code Playgroud)