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

FreeMarker get variable value by concatenating another variable value

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}

与其尝试创建一个变量(我认为那样做是不可能的),我建议为模板提供一个数组。

像这样

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;
}

您可以使用运行时生成的名称读取变量,例如 .vars['map_' + i]。这与汤姆在他的回答中使用的技巧相同,但申请读取顶级变量。