开发者

VTL evaluate or define an object reference

I would like to create a macro that takes a string as a parameter and evaluates that to an object. Something like:

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

Unfortunately the $obj variable does not point to object reference that could be used to call methods. $obj is a String and $obj.foo does not try to execute getFoo.

Somewhy I have a feeling that this is the nature of evaluate and it is not possible to do what I want to.

the reason why I want to do smth like this is because we have quite few macros that take both command bind path and command itself as a parameter and I am hoping the latter could be derived 开发者_StackOverflowfrom first.


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.

In cases like this, the way to proceed is generally to create a "tool" in Java and put an instance in the context. A tool is just an ordinary class with a method that returns what you are looking for

e.g.

create an object with an "eval" method, then put it in the context as "referenceEvaluator".

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

You might find that your code is clearer if you avoid the double evaluation and just insert an object into the context named $obj that does what you want. (better performance, too).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜