On 9/6/2011 8:40 AM, Vincent Massol wrote:
Yes, this is all I needed. Didn't realize I could invoke it inline. Not sure how I missed that! Thanks!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
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

