Получить конкретное значение по ключу из Hashmap в шаблоне скорости

У меня есть код 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

1 ответ

Решение

Используйте этот код для перебора значений вашей карты. Это почти так же, как у вас, однако обратите внимание на: $userList.keySet() вместо $userList.entrySet() а также $!{userList.get($mapKey )} вместо $!{mapEntry.get("44")}

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

Если вы хотите просто получить доступ к определенному значению вашей карты, попробуйте это:

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

Согласно https://velocity.apache.org/engine/1.7/user-guide.html:

Вы можете получить доступ к первому элементу выше, используя $monkey.Map.get("banana") чтобы вернуть строку "хорошо" или даже $monkey.Map.banana чтобы вернуть то же значение.

Согласно https://velocity.apache.org/engine/1.7/user-guide.html

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

Другие вопросы по тегам