VTL评估或定义对象引用

时间:2010-10-12 09:06:32

标签: spring-mvc velocity

我想创建一个宏,它将一个字符串作为参数并将其计算为一个对象。类似的东西:

#macro( valueTest $objRef)
  #define( $obj )#evaluate("$${objRef}")#end
  $obj.foo ## This would have to be translated to $obj.getFoo()
#end

不幸的是,$ obj变量没有指向可用于调用方法的对象引用。 $ obj是一个String,$ obj.foo不会尝试执行getFoo。

为什么我觉得这是评价的本质,不可能做我想做的事。

我想这样做的原因是因为我们有很少的宏将命令绑定路径和命令本身作为参数,我希望后者可以从第一个派生出来。

1 个答案:

答案 0 :(得分:0)

Unfortunately, Velocity does not have a mechanism to define functions which return object references.  Macros are really intended to be a shortcut to display text.

在这种情况下,继续进行的方法通常是在Java中创建一个“工具”并在上下文中放置一个实例。工具只是一个普通的类,其方法可以返回您要查找的内容

e.g。

使用“eval”方法创建一个对象,然后将其作为“referenceEvaluator”放在上下文中。

#set($obj = $referenceEvaluator.eval($objRef))

如果您避免双重评估并且只是将一个对象插入到名为$ obj的上下文中,您可能会发现您的代码更清晰。 (性能也更好)。