public class Main {
public static void main(String[] args) throws IOException, TemplateException{
Configuration freemarkerConfig = new Configuration();
freemarkerConfig.setClassForTemplateLoading(Main.class, "");
Template template = freemarkerConfig.getTemplate("template.ftl");
Map<String, String> data = new HashMap<String, String>();
for(int i=1;i<=10;i++){
data.put("map_"+i, "value"+i);
}
Writer out = new StringWriter();
template.process(data, out);
System.out.println(out.toString());
}
}
以下是我访问变量的FTL代码:
<#assign containerIndex=1>
${map_containerIndex}
This gives error
I want to evaluate ${map_1}
答案 0 :(得分:0)
我没有尝试创建变量(我认为不可能这样),我建议为模板提供一个数组。
喜欢这样
String[] stringArray = new String[11];
for (int i = 1; i<= 10; i++) {
stringArray[i] = "value"+i;
}
data.put("map", stringArray);
Freemarker中的访问应该看起来像
<#assign containerIndex=1>
${map[containerIndex]}
或类似的东西,无法尝试atm
另请注意,通过以1开始for循环(如示例所示),将不会使用第一个数组槽。
我建议
String[] stringArray = new String[10];
for (int i = 0; i < 10; i++) {
stringArray[i] = "value"+i;
}
答案 1 :(得分:0)
您可以使用.vars['map_' + i]
等运行时生成的名称读取变量。这与汤姆在他的回答中使用的技巧相同,但适用于阅读顶级变量。