通过速度模板中的Hashmap通过键获取特定值

时间:2018-07-13 06:38:33

标签: java velocity velocity-template-language

我有一个如下的Java代码

  public static void main(String args[]) throws Exception {
    VelocityEngine engine = new VelocityEngine();
    engine.init();

    Template template = engine.getTemplate("userinfo.vm");

    VelocityContext vc = new VelocityContext();

    Map<String, Object> jsonResponse = new HashMap<String, Object>();

    jsonResponse.put("44", "United Kingdom");
    jsonResponse.put("33", "France");
    jsonResponse.put("49", null);

    vc.put("userList", jsonResponse);
    StringWriter writer = new StringWriter();
    template.merge(vc, writer);

    System.out.println(writer);
}

.vm文件中的

#foreach ($mapEntry in $userList.entrySet())
$!{mapEntry.get("44")}
#end

在这里,我尝试使用上述代码获取特定的值,但未提供预期的输出结果

我的预期输出是

 United Kingdom

2 个答案:

答案 0 :(得分:0)

使用此代码遍历地图值。它与您的几乎一样,但是要注意:$userList.keySet()代替$userList.entrySet()$!{userList.get($mapKey )}代替$!{mapEntry.get("44")}

#foreach($mapKey in $userList.keySet())
    $!{userList.get($mapKey )}
#end

如果您只想访问地图的特定值,请尝试以下操作:

$!{userList.get("44")}

答案 1 :(得分:0)

https://velocity.apache.org/engine/1.7/user-guide.html#set

您可以使用来访问上面的第一个元素 $monkey.Map.get("banana")返回字符串“ good”,甚至 $monkey.Map.banana返回相同的值。

https://velocity.apache.org/engine/1.7/user-guide.html#index-notation

$foo["bar"] ## Passing a string where $foo may be a Map