Velocity Template Engine: как проверить, установлена ​​ли переменная в макросе с помощью переданного параметра - PullRequest
3 голосов
/ 23 апреля 2020

В настоящее время у меня есть рабочий метод, который проверяет, установлена ​​ли переменная. Я делаю это так

CHECKING EACH VARIABLE:
#if($!{vh})
vh instance found!<br>
Classname: ${vh.class.name}<br>
#end
#if($!{su})
su instance found!<br>
Classname: ${su.class.name}<br>
#end

В настоящее время будет напечатано это:

ПРОВЕРКА КАЖДОГО ПЕРЕМЕННОГО: vh экземпляр найден! Имя класса: de.integration.commons.VelocityXPathHelper

su экземпляр найден! Имя класса: de.integration.commons.StringUtils

Подсказка: раньше я вводил эти переменные в контекст.

Поскольку мне нужно проверять множество переменных и вводить переменные иногда я создавал макрос, который должен делать то же самое, в сочетании с al oop для массива строк, который содержит известные введенные переменные, такие как:

#* Macro - checkIfVariableExists
This macro checks if variable exists with the quit reference notation
check http://velocity.apache.org/engine/devel/user-guide.html#quiet-reference-notation for more information *#
#macro (checkIfVariableExists $variablename)
    #if($!{variablename})
        $variablename instanz found!<br>
        Classname: ${variablename.class.name}<br>
    #end
#end

RESULT FROM LOOP:
#set( $toCheck = ["vh","su","anothervariable","...","....", "....."] )
#foreach( $value in $toCheck )
    #checkIfVariableExists($value)
#end

Однако это не будет работать и результат в этот вывод:

РЕЗУЛЬТАТ ОТ L OOP: vh instanz найден! Имя класса: java .lang.String su instanz found! Имя класса: java .lang.String

Как мне сделать эту работу? Я понимаю, что значение является строкой, однако я хочу использовать его значение, как и в первом подходе. Любые идеи? Я использую двигатель скорости 1.7 и не могу перейти на более высокую версию.

1 Ответ

1 голос
/ 06 мая 2020

Если вы проверяете, что доступно в контексте, вы также можете использовать Velocity ContextTool (https://velocity.apache.org/tools/3.0/apidocs/org/apache/velocity/tools/generic/ContextTool.html).

Он доступен начиная с версии VelocityTools 2.0 (это делает не соответствуют версии Velocity!), и вы можете использовать

$context.keys

, чтобы найти все переменные, которые доступны в контексте. (Это Set, поэтому метод contains будет работать.)

...