On Thu, 29 Nov 2001, giacomo wrote:

> On Wed, 28 Nov 2001, Christian Haul wrote:
>
> > Team,
> >
> > please have a look at this from cocoon-users.
> >
> > Chris.
>
> > Thanks Cris,
> >
> > Again you saved me, man. Thanks.
>
> You're welcome :-)
>
> > Approach with <map:parameter name="target" value="welcome"/> generates
> code
> > in wrong place, which cause compilation error of sitemap. So I guess it
> > could be treated as a BUG.
>
> I tend to disagree here. There's no language element that allows
> setting of sitemap parameters er, variables. They are usually the
> result of sitemap components execution. More in particular, from those
> components that are used to determine the actual pipeline from the
> given fragments (matchers, actions; selectors return only true /
> false).
>
> <map:parameter/> is used to do runtime configuration of those
> components. <map:redirect-to/> is no component but a control
> statement and thus doesn't take runtime configuration.
>
> I agree, though, that @target is probably not as clean as possible. A
> better solution would be, to introduce some construct to set those
> variables without the need of an action, like
>
>   <map:variables>
>      <map:parameter name="foo" value="xyz"/>
>      <map:parameter name="bar" value="uvw"/>
>   </map:variables>

I'm not very happy with this. What is the reason to have those variables
and how and why should they be used? I know if we block such a request
someone will write a Matcher that spans everything that needs access to
variables like

   <map:match type="create-a-root-map">
     <map:parameter name="bar" value="uvw"/>
     <map:parameter name="foo" value="xyz"/>

     <map:macth patter="foo">
       <map:generate src="{../foo}/bar.xml"/>
       ...

This is IMO a misuse of the Matcher concept, but yes I'm sure someone will
do it sometimes.

Giacomo

>
> that is translated by the following in sitemap.xsl (not tested!):
>
> <xsl:template match="map:variables">
>    Map map = new HashMap(<xsl:value-of select="count(map:parameter)"/>);
>    <!-- actually, here we could as well use for-each since only
>         map:parameter would be allowed here. OTOH a common advice is
>         not to use for-each for performance reasons. See below for
>         alternative solution.
>    -->
>    <xsl:apply-templates/>
>    listOfMaps.add(map);
>    this.dumpParameters();
> </xsl:template>
>
> <xsl:template match="map:variables/map:parameter" priority="2">
>    map.put("<xsl:value-of select="@name"/>", substitute(listOfMaps,
> "<xsl:value-of select="@value"/>"));
> </xsl:template>
>
>
> Or
>
> <xsl:template match="map:variables">
>    Map map = new HashMap(<xsl:value-of select="count(map:parameter)"/>);
>    <xsl:for-each select="map:parameter">
>       map.put("<xsl:value-of select="@name"/>", substitute(listOfMaps,
> "<xsl:value-of select="@value"/>"));
>    </xsl:for-each>
>    listOfMaps.add(map);
>    this.dumpParameters();
> </xsl:template>
>
>
> Team, shall we have a vote on this?
>
>         Chris.
>
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to