настройка переменных свойств со скоростью

Во время поиска я хотел бы получить подтверждение:

Я хотел бы установить переменную свойств для переменной скорости:

#set($infos.get("trackerData").get(0).get("info_suivi")=tracking.status)

Мой файл свойств содержит:

tracking.status.liv=livré
tracking.status.env=envoyé
tracking.status.cmd=commandé
tracking.status.err=erreur
tracking.status.ann=annulé

а $infos — это карта

Это правильный синтаксис?

Спасибо.


person Ale    schedule 21.01.2014    source источник


Ответы (1)


Основным вариантом использования #set является присвоение значения переменной:

#set ($variable = 'value')

Вторичный вариант использования, который работает только в более поздних версиях Velocity, заключается в присвоении значений свойствам объекта, если для этих свойств существует установщик (т. е. объект является простым компонентом):

#set ($object.property = 'value')
## Same as:
$object.setProperty('value')

Благодаря некоторой магии Velocity это также работает для карт и индексированных списков:

#set ($map = {})
#set ($map.key = 'value')
$map
## Same as:
$map.put('key', 'value')
## ...except that it doesn't print the previous value stored in the map

#set ($array = ['original'])
#set ($array[0] = 'changed')
$array
## Same as:
$array.set(0, 'changed')
## ...except that it doesn't print the previous value stored in the array

Но он никогда не сможет присвоить значение другому значению. $infos.get("trackerData").get(0).get("info_suivi") заканчивается геттером, поэтому он вернет значение. Присвоение значения другому значению невозможно почти во всех языках программирования.

Во-вторых, #set ($something = tracking.status) недействителен независимо от того, что такое $something. Если вы попытаетесь это сделать, это даст синтаксическую ошибку. В Velocity нет встроенной функции для чего-либо, кроме того, что обеспечивается очень немногими известными ключевыми словами: #foreach для перебора переменных, #if для проверки переменных, #set для изменения переменных и несколько других, которые на самом деле не имеют отношения к переменным. Предполагается ли использовать файл свойств в качестве ресурса локализации? Затем вам нужно загрузить их либо в ResourceBundle или объект Properties, поместите этот объект в VelocityContext, а затем использовать его, вызывая методы класса Java, используемые для получения значений на основе ключа. Это getString('key')< /a> для объекта ResourceBundle и просто get('key') для объекта Properties.

В-третьих, в файле свойств есть ключи с префиксом tracking.status, а tracking.status само по себе не является фактическим свойством. Как узнать реальный статус? Вы на самом деле пытаетесь получить сообщение за ключом, полученным путем добавления префикса значения за свойством info_suivi с помощью tracking.status.? Затем, предполагая, что файл свойств доступен через $messages, это должно работать:

$messages.getString("tracking.status.${infos.get('trackerData').get(0).get('info_suivi')}")

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

#set ($infoSuivi = $messages.getString("tracking.status.${infos.get('trackerData').get(0).get('info_suivi')}"))
person Sergiu Dumitriu    schedule 25.01.2014
comment
Большое спасибо Серджиу! - person Ale; 27.01.2014