0
我想使用Velocity生成以下代碼段。帶映射的嵌套foreach無法在Velocity中正常工作
Map<String, List<String>> fruitsAndTypesMap = new HashMap<String, List<String>>();
String fruit_Apple = "Apple";
List<String> types_Apple = new ArrayList<String>();
types_Apple.add("KA");
types_Apple.add("WA");
fruitsAndTypesMap.put(fruit_Apple, types_Apple);
String fruit_Orange = "Orange";
List<String> types_Orange = new ArrayList<String>();
types_Orange.add("HO");
types_Orange.add("LO");
fruitsAndTypesMap.put(fruit_Orange, types_Orange);
我template_fruits.vm文件如下。
#if ($fruitsMap.size()>0)
Map<String, List<String>> fruitsAndTypesMap = new HashMap<String,List<String>>();
#foreach($fruitName in $fruitsMap.keySet())
String fruit_$fruitName = "$fruitName";
List<String> types_$fruitName = new ArrayList<String>();
#foreach($fruitType in $fruitsMap.get($fruitName))
types_$fruitName.add("$fruitType.name");
#end
fruitsAndTypesMap.put(fruit_$fruitName, types_$fruitName);
#end
#end
問題的發言:types_ $ fruitName.add( 「$ fruitType.name」); 它不正確地評估$ fruitName。 但是,如果我修改語句爲:類型_($ fruitName).add(「$ fruitType.name」),它會被正確計算,但該值用括號括起來。我不明白括號的評價技巧。
下面的代碼可以用來加載相關的模板執行$ fruitsMap
public static Map<String, List<Fruit>> getFruitsMap(){
Map<String, List<Fruit>> fruitsMap = new HashMap<String, List<Fruit>>();
List<Fruit> applesList = new ArrayList<Fruit>();
Fruit fruit_Apple = null;
fruit_Apple = new Fruit(); fruit_Apple.setName("KA");
applesList.add(fruit_Apple);
fruit_Apple = new Fruit(); fruit_Apple.setName("WA");
applesList.add(fruit_Apple);
List<Fruit> orangesList = new ArrayList<Fruit>();
Fruit fuit_Orange = null;
fuit_Orange = new Fruit(); fuit_Orange.setName("HO");
orangesList.add(fuit_Orange);
fuit_Orange = new Fruit(); fuit_Orange.setName("LO");
orangesList.add(fuit_Orange);
fruitsMap.put("Apple", applesList);
fruitsMap.put("Orange", orangesList);
return fruitsMap;
}
代碼:
VelocityEngine velEngine = new VelocityEngine();
velEngine.init();
Template template = velEngine.getTemplate("template_fruits.vm");
VelocityContext context = new VelocityContext();
context.put("fruitsMap", FruitClient.getFruitsMap());
StringWriter writer = new StringWriter();
template.merge(context, writer);
System.out.println("Content: " + writer.toString());
語句錯誤的提示 - > types_ $ fruitName.add(「$ fruitType.name」);將會有所幫助。
感謝
+1 for .add澄清。 – Gana