Apache Velocity Placeholder Интерполяция - PullRequest
0 голосов
/ 07 июня 2019

Может быть, потому что сегодня здесь, в Великобритании, пятничный полдень, и мой мозг решил замедлиться в нетерпеливом ожидании выходных, но я нашел себе кроличью нору с Apache Velocity и надеюсь, что один из вас милый люди в интернете смогут снова запустить мой мозг.

Мой сумасшедший случай использования следующий:

#foreach( $item in $array )
    #set($myVariable = "#customDirective('a.key.with.the.${foreach.index}')")
#end

У меня есть цикл for для итерации по списку, затем для каждого элемента в этом списке я вызываю пользовательскую директиву, которая принимает параметр, который является предварительно определенным ключом, частью которого является индекс цикла. Я установил результат пользовательской директивы в переменную, чтобы ее можно было использовать в дальнейшем.

Теперь я понимаю, что все, что находится внутри одинарных кавычек ('), рассматривается как литерал, а все, что находится внутри двойных кавычек ("), разрешается. Поэтому я вижу, что когда я выхожу из входного параметра в пользовательская директива, $ {foreach.index} не была преобразована в значение, а вместо этого обрабатывается как строковый литерал.

Как правильно построить мой входной параметр для директивы в этом сценарии?

Я использую Velocity версии 2.0, но могу обновить или понизить, если это необходимо.

1 Ответ

1 голос
/ 07 июня 2019

В пятницу днем ​​лучше разбить оценку на две строки:

#foreach( $item in $array )
    #set($arg = "a.key.with.the.${foreach.index}")
    #set($myVariable = "#foo($arg)")
#end

и оставить однострочники на утро понедельника:

#foreach( $item in $array )
    #set($myVariable = "#foo(""a.key.with.the.${foreach.index}"")")
#end

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

...