You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by H....@MI.unimaas.nl on 2004/12/01 14:55:00 UTC

JXTemplate macro: how to create "return value"?

Hi guys,

I'm trying to create a jx:macro that does some processing and then stores
the result in a variable. I would like this macro to behave as a function,
i.e. pass the content of this variable to an external variable.

I've tried several approaches, but I don't get the result I want. Who can
help?

>From the dynamic repeater example I would assume that the following should
work, but it doesn't.

<jx:macro name="myMacro">
 <jx:parameter name="someParameter"/>
 <!-- do some processing -->
 <jx:set var="resultvar" value="${processingresult}"/>
 <jx:evalBody/>
</jx:macro>


<jx:set var="getResult" value="blah"/>
<myMacro someParameter="somevalue"/>
<jx:set var="getResult" value="${resultvar}"/>
</myMacro>

<p>${getResult}</p>

I would expect this to display the result of the macro, but it displays
"blah".

Any idea?

Thanks.

Bye, Helma

Re: JXTemplate macro: how to create "return value"?

Posted by oceatoon <t....@systheo.com>.
H.vanderLinden@MI.unimaas.nl wrote:

> Hi guys,
> 
> I'm trying to create a jx:macro that does some processing and then stores
> the result in a variable. I would like this macro to behave as a function,
> i.e. pass the content of this variable to an external variable.
> 
> I've tried several approaches, but I don't get the result I want. Who can
> help?
> 
> From the dynamic repeater example I would assume that the following should
> work, but it doesn't.
> 
> <jx:macro name="myMacro">
>  <jx:parameter name="someParameter"/>
>  <!-- do some processing -->
>  <jx:set var="resultvar" value="${processingresult}"/>
>  <jx:evalBody/>
> </jx:macro>
> 
> 
> <jx:set var="getResult" value="blah"/>
> <myMacro someParameter="somevalue"/>
> <jx:set var="getResult" value="${resultvar}"/>
> </myMacro>
> 
> <p>${getResult}</p>
> 
> I would expect this to display the result of the macro, but it displays
> "blah".
> 
> Any idea?
> 
> Thanks.
> 
> Bye, Helma
Hi Helma

Variables seem to be restrained to the scope of the Macro (the same for
forEach), we work around this like this, maybe it'll work for you. 

declare a global variable(we use a hash but you can use any structure):

<jx:set var="globalvars" value="${java.util.HashMap(5)}"/>

<myMacro someParameter="somevalue"/>
<jx:set var="push" value="${resultvar}"/>
<jx:set var="dummy" value="${globalvars.put('getResult', resultvar)}"/>
</myMacro>

<p>${globalvars.getResult}</p>

Regards
Tibor