Re: What does "Velocimacro with a Body" mean?
Nathan Bubna <[email protected]> Wed, 7 Aug 2013 15:05:51 -0700
| Newsgroups | gmane.comp.jakarta.velocity.user |
|---|---|
| Message-ID | <CAFyaDjFipM7sg2L-2mZYgsbXWDypZ2o0ZvETGMirRm-s5y5Prw@mail.gmail.com> |
D'oh. I should have seen that. Thanks, Alex! On Wed, Aug 7, 2013 at 2:25 PM, Alex Fedotov <[email protected]> wrote: > It does not work because bodyContent is an instance of the ASTNode class and > not a string, so it does not have the trim method. > > Use something like this: > > #macro(my_trim)#set($str="$bodyContent")$str.trim()#end > > Test: > > before#@my_trim() -blah- #{end}after > > Renders: > before-blah-after > > > On Wed, Aug 7, 2013 at 5:09 PM, O. Olson <[email protected]> wrote: >> >> >> >> Thank you very much Nathan for clarifying what body content >> meant. At least now I know what it means, but I think I am having a >> problem >> with my trim function here. It seems to delete everything. I have no clue >> how >> this worked previously. >> >> To avoid naming conflicts, I decided to rename my macro. It >> now looks like: >> #macro(query_url $query_param) >> q=$query_param >> #end >> >> #macro(my_trim)$!bodyContent.trim()#end >> >> >> >> I call it using >> #@my_trim()#query_url("sometext")#end >> >> >> And the result is blank i.e. I do not see anything in the >> result. I now attempt: >> #macro(my_trim)PREPEND$!bodyContent.trim()#end >> >> >> This time I see only: >> PREPEND >> >> This is expected, but why nothing from $!bodyContent.trim() >> >> I don't know what is happening to trim() function i.e. why >> it is not working. But thank you for answering my question. >> >> O. O. >> >> >> ----- Messaggio originale ----- >> Da: Nathan Bubna <[email protected]> >> A: Velocity Users List <[email protected]>; O. Olson >> <[email protected]> >> Cc: >> Inviato: Lunedì 5 Agosto 2013 22:34 >> Oggetto: Re: What does "Velocimacro with a Body" mean? >> >> Yes, all velocimacros have bodies in their definition: >> >> #macro( foo ) definition only #end >> #macro( bar ) definition accepts $bodyContent #end >> >> Not all velocimacros accept bodies in their usage: >> >> #foo() >> #@bar() body content when used #end >> >> Produces: >> >> definition only >> definition accepts body content when used >> >> As to why your example ends up with preceding spaces, i am not >> certain. The "format" part in particular, because Velocity has only >> input text and output text, no "format". Try defining your #@trim >> like so: >> >> #macro( trim )$!bodyContent.trim()#end >> >> to ensure there are no sneaky whitespaces hiding in the definition. >> >> >> On Mon, Aug 5, 2013 at 9:25 AM, O. Olson <[email protected]> wrote: >> > Hi, >> > >> > I am new to >> > Velocity and I am wondering what "Velocimacro with a Body" means? >> > Here, I am referring to the description in >> > http://velocity.apache.org/engine/releases/velocity-1.7/vtl-reference-guide.html#amacro_-_Allows_users_to_define_a_Velocimacro_VM_a_repeated_segment_of_a_VTL_template_as_required >> > >> > I thought >> > all Velocimacros had bodies, just like all non-trivial functions in C or >> > Java >> > have bodies. I attempted the use the above suggestion given in the URL >> > and it did not >> > work. >> > >> > I attempted the following in my Global Library: >> > >> > #macro(query_url $query_param) >> > q=$query_param >> > #end >> > >> > #macro(trim) >> > $!bodyContent.trim() >> > #end >> > >> > According to the above URL, in my template, I called this >> > using: >> > >> > #@trim()#query_url("sometext")#end >> > >> > >> > The result seems to be: >> > q=sometext >> > >> > i.e. there are spaces in the front that I don't like. >> > (Depending on the format you are looking at, these preceeding spaces >> > might be >> > deleted, but they appear in the rendered results.) Any ideas what I am >> > doing >> > wrong? >> > >> > Thank you in advance, >> > O. O. >> > >> > --------------------------------------------------------------------- >> > To unsubscribe, e-mail: [email protected] >> > For additional commands, e-mail: [email protected] >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >