Hi Mark, On Sep 6, 2011, at 2:15 PM, Mark Wallace wrote:
On 9/3/2011 3:08 AM, Vincent Massol wrote:
Hi,
On Sep 2, 2011, at 10:48 PM, Mark Wallace wrote:
I have a macro (implemented in Java) with this interface:
public List<Block> execute(InferenceParameter parameters, String content, MacroTransformationContext context) ;
I want to call this macro from within a velocity script. When I do, it returns a List<Block>. How do I get the velocity script to render the List<Block> properly?
You could check the tutorial at http://rendering.xwiki.org/xwiki/bin/view/Main/ExtendingMacro (check the deployment at the end).
I'm not having a problem invoking the macro in a wiki page. But sometimes I'd like to invoke it from within a larger velocity script. I.e.
I can do this: {{mymacro param="hello"/}} But I'd also like to do this: {{velocity}} #set($words = ["Some", "velocity", "code"]) #foreach($word in $words) $word ## $services.mymacro($word) #end {{/velocity}} I didn't see anything in the deployment part of the tutorial about doing this.
I was going to respond the following: ----- Your first use case is a macro while your second one isn't. The second use case is simply a programmatic service or API that you wish to expose. Macros are not supposed to return anything. To implement your second use case you'd create a Script Service component in java, see http://extensions.xwiki.org/xwiki/bin/view/Extension/Script+Module Now there's another possibility which is to: * call your macro using a groovy script. You'll need to look it up and call its execute method. This will return a List of Blocks * still in the groovy macro code, lookup a renderer and tell it to render the list of blocks. This is slightly more tricky and I don't see why you'd want to do this TBH. To help you further we'd need to know more about your specific use case. ----- But I just understood that you simply want to render the macro from inside your velocity script. So you'd just need to do this: {{velocity}} #set($words = ["Some", "velocity", "code"]) #foreach($word in $words) $word ## {{mymacro param="$word"/}} #end {{/velocity}} Hope it helps, -Vincent
-Mark