Шаблон скорости - получение значений hashmap - PullRequest
0 голосов
/ 07 марта 2019

У меня есть HashMap , который я заполняю внутри класса Java. Когда я пытаюсь распечатать его в шаблоне Velocity, он выглядит хорошо.

$!valuesMap ##gives {33=[texxxxt], 34=[2019-03-31], 35=[admin], 37=[P1], 40=[value1, value2]}

Когда я пытаюсь получить доступ к значениям напрямую, это также выглядит нормально.

$!valuesMap.get("40") ##gives [value1, value2]

Проблема возникает, когда я пытаюсь использовать динамическую переменную для доступа к карте. У меня есть список объектов, по которым я перебираю, и у каждого из этих объектов есть идентификатор. Однако я не могу понять, как извлечь значение из карты, используя этот идентификатор.

#foreach( $field in $fields )
    $!field.ID ##gives the id of the object, i.e. 40

    ##I would assume this would give me [value1, value2] when ID is 40, but it returns nothing
    $!valuesMap.get($!field.ID) 
#end

Я попытался присвоить идентификатор новой переменной (сама переменная печатается нормально, но снова, когда я пытаюсь получить доступ к карте, я ничего не получаю). Я попробовал нотацию, предложенную здесь , и ничего не печатается, это честно толкает меня вверх по стене, потому что я, вероятно, упускаю что-то очень простое, но не могу понять, что это такое.

1 Ответ

0 голосов
/ 08 марта 2019

Velocity Engine 1.7 не преобразует аргументы метода в ожидаемые типы. Поэтому, если $field.ID - это число, вы должны заключить его в двойные кавычки, чтобы получить строку:

$valuesMap.get("$field.ID")

В противном случае движок просто не найдет подходящий метод для вызова.

Начиная с 2.0, Velocity Engine автоматически преобразует аргументы метода в ожидаемые типы, и ваш код будет работать так, как ожидается.

...