FreeMarker通过连接另一个变量值来获取变量值

时间:2015-10-31 10:53:34

标签: java freemarker templating

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}

2 个答案:

答案 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]等运行时生成的名称读取变量。这与汤姆在他的回答中使用的技巧相同,但适用于阅读顶级变量。