Java Velocity模板引擎:如何通过传递的参数检查宏中是否设置了变量

Java Velocity模板引擎:如何通过传递的参数检查宏中是否设置了变量,java,velocity,Java,Velocity,我目前确实有一个工作方法来检查是否设置了变量。 我是这样做的 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}) 找到vh实例

我目前确实有一个工作方法来检查是否设置了变量。 我是这样做的

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})
找到vh实例
类名:${vh.class.name}
#结束 #如果($!{su}) 苏实例找到了
类名:${su.class.name}
#结束
当前将打印以下内容:

检查每个变量: 找到vh实例! 类名:de.integration.commons.VelocityXPathHelper

苏实例找到了! 类名:de.integration.commons.StringUtils

提示:我以前将这些变量注入到上下文中

由于我确实需要检查很多变量,而且注入的变量有时会有所不同,因此我创建了一个宏,该宏应该执行相同的操作,并在包含已知注入变量的字符串数组上进行循环,如下所示:

#* 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
#*宏-检查变量是否存在
此宏检查是否存在带有quit引用符号的变量
检查http://velocity.apache.org/engine/devel/user-guide.html#quiet-有关更多信息,请参考符号*#
#宏(checkIfVariableExists$variablename)
#if($!{variablename})
找到$variablename instanz
类名:${variablename.class.name}
#结束 #结束 循环的结果: #设置($toCheck=[“vh”、“su”、“另一个变量”、“…”、“…”、“…”、“…”) #foreach($toCheck中的值) #checkIfVariableExists($value) #结束
但是,这将不起作用并导致此输出:

循环结果:找到vh instanz! 类名:java.lang.String su instanz找到了! 类名:java.lang.String


我该怎么做?我确实理解value是一个字符串,但是我想像第一种方法一样使用它的值。有什么想法吗?Im使用velocity engine 1.7,无法更改为更高版本。

如果您正在检查上下文中的可用内容,也可以使用velocity ContextTool()

它从VelocityTools 2.0版开始提供(这与Velocity版本不对应!),您可以使用

$context.keys
查找上下文中可用的所有变量。(它是一个
集合
,因此方法
包含的
可以工作。)