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]
。这与汤姆在他的回答中使用的技巧相同,但申请读取顶级变量。
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]
。这与汤姆在他的回答中使用的技巧相同,但申请读取顶级变量。