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 <nbu...@gmail.com>
A: Velocity Users List <user@velocity.apache.org>; O. Olson <olson_...@yahoo.it>
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 <olson_...@yahoo.it> 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: user-unsubscr...@velocity.apache.org
> For additional commands, e-mail: user-h...@velocity.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
For additional commands, e-mail: user-h...@velocity.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
For additional commands, e-mail: user-h...@velocity.apache.org

Reply via email to