cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jiri Luzny <jiri_lu...@yahoo.com>
Subject Re: "redirect-to resource" and substitution of the List of Maps
Date Thu, 17 May 2001 08:58:52 GMT
Here is the working solution:

<!-- redirect to a internal resource definition -->
<xsl:when test="@resource">
  Class[] argTypes = new Class[] {StreamPipeline.class, EventPipeline.class, List.class,
Environment.class, String.class, Boolean.TYPE};
  Object[] argValues = new Object[] {pipeline, eventPipeline, listOfMaps, environment,
cocoon_view, new Boolean(internalRequest)};
  String methodName = "resource_" + substitute(listOfMaps, "<xsl:value-of
select="translate(@resource, '- ', '__')"/>");
  java.lang.reflect.Method  method = this.getClass().getDeclaredMethod(methodName, argTypes);
  if(true)return ((Boolean) method.invoke(this, argValues)).booleanValue();
</xsl:when>


It is small portion of Java Reflection. I'm curious if it is acceptable for you guys :)
I don't see any problem of using it. It would actually used for other dynamic method
invocations like view_ etc.(if it makes sence). It would be also moved to a helper method/class...

Jiri.


>giacomo,
>
>the reason of the namespace tests is OK (it is logical). However, as you mentioned the
actual
>reason why map:redirect-to resource="..."> are not substitutable is that you have to
create a
>dynamic call to a generated resource_ method:

>sitemap.xsl:995,7
><!-- redirect to a internal resource definition -->
><xsl:when test="@resource">
>  if(true)return resource_<xsl:value-of select="translate(@resource, '- ', '__')"/>(pipeline,
>eventPipeline, listOfMaps, environment, cocoon_view, internalRequest);
></xsl:when>
>
>
>
>To implement the required substitution it must be changed to something like this:
>
><!-- redirect to a internal resource definition -->
><xsl:when test="@resource">
>  <xsl:variable name="resourceSubstituted"><xsl:value-of select="java:substitute(listOfMaps,
>@resource)"/></xsl:variable>
>  if(true)return resource_<xsl:value-of select="$resourceSubstituted"/>"(pipeline,
eventPipeline,
>listOfMaps, environment, cocoon_view, internalRequest);
></xsl:when>
>
>
>It is just a clue and it is obvious it won't work. I will be trying to find a working
solution,
>but maybe someone knows it already ;-) ...
>
>
>Jiri.



--- giacomo <giacomo@apache.org> wrote:
> 
> 
> On Tue, 15 May 2001, Marcus Crafter wrote:
> 
> > Hi Jiri,
> >
> > 	See my email from last week at:
> >
> > 	http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=98961067308100&w=2
> >
> > 	There seems to be a problem with the action generation code when it
> > 	tests for what namespace the sitemap is in. This causes the generated
> > 	map:act code not to add the returned Map object to listOfMaps.
> >
> > 	I'm not 100% sure of whether its a bug, or a feature and I've
> > 	misunderstood the namespace check. Have a look at sitemap.xsl, line
> > 	684:
> >
> > <xsl:when test="./*[namespace-uri()='http://apache.org/cocoon/sitemap/1.0']">
> 
> IIRC the reason doing that was to check if there a <map:* ..> elements
> insite the <map:act ...> element to know if we need to push the returned
> map or not.
> 
> A snippet like this:
> 
>    <map:act type="..."/>
> 
> doesn't need to push the returned map into the listOfMaps because no one
> will actually use it. But
> 
>    <map:act type="...">
>      <map:...   >
>    </map:act>
> 
> instead must make the returned map from the Action available for the
> content of the <map:act ...> element.
> 
> Giacomo
> 
> >
> > 	I'm not exactly sure why this test is there ? But it is what's causing
> > 	the noted behaviour.
> >
> > 	You can get the behaviour you're expecting by adding:
> >
> > 	listOfMaps.add (map);
> >
> > 	after line 693 in sitemap.xsl, but that's strictly a workaround, and
> > 	not a fix.
> >
> > 	Hopefully some of the more sitemap.xsl savvy developers might be able
> > 	to shed some light here. :-)
> >
> > 	Cheers,
> >
> > 	Marcus
> >
> > On Tue, 15 May 2001, Jiri Luzny wrote:
> >
> > > I'm tried to the following redirection using a sitemap parameter from an action
and it
> doesn't
> > > work:
> > >
> > > ------
> > > <map:match pattern="foo">
> > >   <map:act type="some-validator">
> > >     <map:redirect-to resource="foo-{next}"/>
> > >   </map:act>
> > > </map:match>
> > >
> > > <map:resource name="foo-second">
> > > ..
> > > ..
> > > </map:resource>
> > > -------
> > >
> > > For "uri" redirection:
> > > -----
> > > <map:redirect-to uri="foo-{next}"/>
> > > -----
> > > it works without any problem.
> > >
> > > I took look at sitemap.xsl and it seems that the substitution of the List of
Maps is not
> > > implemented for "resource" type of the redirection. Why? I think it is useful
as well...
> > >
> > > Jiri.


__________________________________________________
Do You Yahoo!?
Yahoo! Auctions - buy the things you want at great prices
http://auctions.yahoo.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org


Mime
View raw message