I am having some problems with this in 5.1.05

When I run the webapp I see how it gets to the environment.push but it
throws this runtime error:

Render queue error in AfterRender[ExceptionReport:layout]: No object
of type ar.com.condortech.lib.tapestryFbSecurityLib.extra.Mode is
available from the Environment.  Available types are
org.apache.tapestry5.RenderSupport,
org.apache.tapestry5.ValidationDecorator,
org.apache.tapestry5.internal.services.DocumentLinker,
org.apache.tapestry5.services.ClientBehaviorSupport,
org.apache.tapestry5.services.Heartbeat.


I don't know what I am doing wrong, as I said, it gets to the environment.push


any idea? Cheers!



On Wed, Apr 4, 2012 at 11:01 AM, Lance Java <lance.j...@googlemail.com>wrote:

> Lets get back to basics here... you already have an instance of a link but
> you want to transform a couple of methods to return slightly different
> values. Let's forget about base path as it looks like that was added in 5.3
> to make this job easier and we don't have that luxury in 5.1.05
>
> In tapestry 5.1.05, it looks like you will need to transform the following
> methods on the Link interface
>    public String toURI();
>    public String toRedirectURI();
>    public String toAbsoluteURI();
>
> I would do this in two phases, firstly I would create a DelegateLink class
> which
>   1. Contains no logic
>   2. Implements Link
>   3. Takes a Link instance in it's constructor (the delegate)
>   4. Delegates all methods to the delegate
>
> Then, add your specific logic in an anonymous inner class, this means that
> DelegateLink can be re-used for other purposes.
>
> private Link transform(final Link link) {
>   ...
>   transformed = new LinkDelegate(link) {
>       public String toURI() {
>           // do stuff with link.toURI();
>       }
>       public String toRedirectURI()  {
>           // do stuff with link.toRedirectURI();
>       }
>       public String toAbsoluteURI() {
>           // do stuff with link.toAbsoluteURI();
>       }
>   }
>   ...
> }
>
> I already do this exact same trick to transform the request:
>
> private Request transform(Request request) {
>   ...
>   transformed = new RequestDelegate(request) {
>      public String getPath() {
>         return newPath;
>      }
>   };
>   ...
> }
>
> Tapestry plastic has some magic to create delegates for you but lets not go
> there for simplicity ;)
>
> On Wednesday, 4 April 2012, Juan Alba <juan.a...@condortech.com.ar> wrote:
> > Sorry Lance but I don't understand how to replace the link with an
> > interface if I can't make a copyWithBasePath because I cant set/access
> all
> > the attributes of the link.
> >
> > Sorry but I don't understand.
> >
> > I am talking about link.getBasePath() and
> > the link.copyWithBasePath(newPath) in the method transform from the
> > class ModeComponentEventLinkEncoder.
> >
> >
> > Regards.
> >
> >
> > On Tue, Apr 3, 2012 at 4:49 PM, Lance Java <lance.j...@googlemail.com
> >wrote:
> >
> >> Take a look at my RequestDelegate class which delegates every method to
> >> another class. I then override one method which I want to change.
> >>
> >> You could do exactly the same and create a LinkDelegate. After all, it's
> >> just an interface
> >>
> >> :)
> >>
> >> On Tuesday, 3 April 2012, Juan Alba <juan.a...@condortech.com.ar>
> wrote:
> >> > First of all thanks a lot for all your time and help Lance. I have
> used
> >> > your example and worked perfect. I could use the mode to put the
> >> > css dynamically as I wished. Thanks a lot.
> >> >
> >> > Now my problem is trying to use it in my web app. In tapestry 5.1.0.5
> >> > LinkImpl doesn't have getBasePath(), or copyWithBasePath(). You are
> using
> >> > them in the ModeComponentEventLinkEncoder.
> >> >
> >> > I decided to replace the getBasePath() with toAbsoluteURI() and to
> create
> >> a
> >> > private method to copy the link passing the link as an attribute but
> it
> >> is
> >> > imposible to create an instance of LinkImpl from the link because I
> can't
> >> > get the values of optimizable, linkforForm, response, optimizer from
> it.
> >> > I don't know how to continue from here and if I can replace the
> basePath
> >> > with the AbsoluteUri. :(
> >> >
> >> > Thanks.
> >> >
> >> > On Sat, Mar 31, 2012 at 9:43 AM, Lance Java <
> lance.j...@googlemail.com
> >> >wrote:
> >> >
> >> >> I've put together a little demo decorating the
> ComponentEventLinkEncoder
> >> >> which I'm sure you could adapt to the deprecated URLRewriter if you
> >> prefer
> >> >> it that way. I've done it in tapestry 5.3 but it could be packported
> to
> >> >> tapestry 5.1.0.5 as is.
> >> >>
> >> >> I've setup three "special" prefixes for "foo", "bar" and "facebook"
> >> >>
> >> >> If you download it and mvn jetty:run then hit
> >> >> http://localhost:8080/tapestry-sandbox/facebook/modepage1. You will
> see
> >> >> that the "mode" environmental is set to "facebook". Click on either
> of
> >> the
> >> >> links and you will be sent to
> >> >> http://localhost:8080/tapestry-sandbox/facebook/modepage2<
> >> >> http://localhost:8080/tapestry-sandbox/facebook/modepage1>
> >> >>
> >> >> Likewise, you can try
> >> >> http://localhost:8080/tapestry-sandbox/foo/modepage1<
> >> >> http://localhost:8080/tapestry-sandbox/facebook/modepage1>
> >> >> (mode
> >> >> = foo)
> >> >>
> >> >> Or
> >> >> http://localhost:8080/tapestry-sandbox/modepage1<
> >> >> http://localhost:8080/tapestry-sandbox/facebook/modepage1>
> >> >> (mode
> >> >> = null)
> >> >>
> >> >>
> >> >> Code is here
> >> >> https://github.com/uklance/tapestry-sandbox
> >> >>
> >> >> Interesting files here
> >> >>
> >> >>
> >>
> >>
>
> https://github.com/uklance/tapestry-sandbox/tree/master/src/main/java/com/github/uklance/extras
> >> >>
> >> >>
> >> >> Cheers,
> >> >> Lance.
> >> >>
> >> >
> >>
> >
>

Reply via email to