You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by George Christman <gc...@cardaddy.com> on 2014/11/12 02:53:35 UTC

Re: How do you remove link Parameters generically?

So I've run into the same problem on a couple of occasions and I've yet to
find a good work around either. Alejandro suggestion doesn't seem to work
for me do to the fact my links are in the layout component and not the
page. Anybody have any suggestions? I agree with Barry, although this may
be helpful in some cases, it seems like a bug in others. If we could just
add null to the parameter, then it would work perfectly for both sides.

On Mon, May 13, 2013 at 8:49 AM, Barry Books <tr...@gmail.com> wrote:

> Thanks,
>
> That does exactly what I needed. It appears to be called before the new
> parameters are added so it lets you remove the defaults.
>
>
> On Mon, May 13, 2013 at 7:27 AM, Alejandro Scandroli <
> alejandroscandroli@gmail.com> wrote:
>
> > Hi Barry
> >
> > I've been using a different workaround for this and maybe it could help
> > you.
> > You can listen for the DECORATE_PAGE_RENDER_LINK and then "decorate" the
> > link as you want.
> > Add something like this to your page.
> >
> > @OnEvent(EventConstants.DECORATE_PAGE_RENDER_LINK)
> > void decoratePageRenderLink(Link link, PageRenderRequestParameters
> > parameters)
> > {
> > if (parameters.getLogicalPageName().equals("YOUR_LOGICAL_PAGE_NAME")) {
> > for (String name : link.getParameterNames())
> >  {
> > link.removeParameter(name);
> > }
> > }
> > }
> >
> > Cheers.
> > Alejandro.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > On Thu, May 9, 2013 at 2:44 PM, Barry Books <tr...@gmail.com> wrote:
> >
> > > I am using @ActivationRequestParameter and perhaps this is feature
> under
> > > some circumstances but currently it seems like a bug to me.
> > >
> > > In this case I have a menu item called 'All Prints' that goes to a page
> > > that might set ARP fields from a search. I'd like the menu link to
> always
> > > go to the page without any url parameters so that it will show All
> > Prints.
> > > If I just had a simple PageLink I could just set
> > parameters="{'tag'='All'}"
> > > but  the menu links come from a database so they can be dynamically
> > added.
> > > I did get it to work as I wanted by adding a context of 'All' the
> > pagelink
> > > and then set tag to null in begin render. The only think I don't like
> > about
> > > that is the URL ends up being:
> > >
> > > /studio/work/All?tag=Paris (best case would be /studio/work?tag=All
> > which I
> > > don't really care for either)
> > >
> > > I suspect I'll really fix this by hardcoding a URL in the database and
> > just
> > > using <a href="/studio/work/"> but that seems wrong.
> > >
> > > I guess it comes down to what PageLink should do. I view it as a way to
> > go
> > > to some arbitrary page with a set of arguments I specify. I'm OK with
> > > leaving context and parameters empty and Tapestry providing defaults
> but
> > it
> > > seems like if I supply a value it should use that and only that. I
> > suppose
> > > there may be other cases where this functionality is useful but I can't
> > > think of any off hand. Perhaps if parameters="null" or parameters="{}"
> > > would just remove all parameters that might be OK and would solve the
> > > common case of:
> > >
> > > 1. A menu item linking to a page that shows a bunch of things
> > > 2. The page has search parameters to narrow the list and uses ARP to
> > store
> > > them
> > >
> > > The menu link does not need to know (and should not know) what the
> > possible
> > > set of search criteria is, it just wants to turn them all off. The
> search
> > > page can handle them using EventLink to clear individual ones.
> > >
> > >
> > >
> > > On Wed, May 8, 2013 at 7:06 PM, Howard Lewis Ship <hl...@gmail.com>
> > > wrote:
> > >
> > > > I suspect you are using @ActivationRequestParameter annotatations and
> > > that
> > > > is the source of your "sticky" query parameters.
> > > >
> > > > It may be a bug that you explicitly supply an empt parameters map to
> > the
> > > > PageLink and it still adds the ARP in, but that is likely a feature.
> > > >
> > > > To accomplish what you want, you may need to set the ARP fields to
> null
> > > > inside beginRender().
> > > >
> > > >
> > > >
> > > > On Wed, May 8, 2013 at 6:02 AM, Barry Books <tr...@gmail.com>
> wrote:
> > > >
> > > > > I've got a menu item generated from a database with a pagelink like
> > > this
> > > > >
> > > > > <t:pagelink page="prop:drop.page" context="dropContext"
> > > > > style="${drop.style}"
> > > > > >${drop.label}</t:pagelink>
> > > > >
> > > > >
> > > > > I've added a search function to one of the linked pages that adds
> > > > > parameters to the URL with
> > > > >
> > > > >
> > > > > <t:pagelink ...  parameters="search">Page</t:pagelink>
> > > > >
> > > > >
> > > > > I'd like to make the menu item clear the search so I tried this:
> > > > >
> > > > >
> > > > > <t:pagelink page="prop:drop.page" context="dropContext"
> style="${drop
> > > > > .style}" parameters="{}">${drop.label}</t:pagelink>
> > > > >
> > > > >
> > > > > but it does not work. It seems Tapestry is clever enough to always
> > add
> > > my
> > > > > search criteria to the parameter map. This would be easy enough to
> > fix
> > > if
> > > > > my menu was not driven from a database but I don't see an easy to
> > make
> > > my
> > > > > generic menu know how to fix this.
> > > > >
> > > > >
> > > > > It would seem useful to be able to say <t:pagelink ...
> > > > > parameters="null">Page</t:pagelink> but parameters cannot be set to
> > > null.
> > > > >
> > > > >
> > > > > Any suggestions?
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Howard M. Lewis Ship
> > > >
> > > > Creator of Apache Tapestry
> > > >
> > > > The source for Tapestry training, mentoring and support. Contact me
> to
> > > > learn how I can get you up and productive in Tapestry fast!
> > > >
> > > > (971) 678-5210
> > > > http://howardlewisship.com
> > > >
> > >
> >
>



-- 
George Christman
CEO
www.CarDaddy.com
P.O. Box 735
Johnstown, New York

Re: How do you remove link Parameters generically?

Posted by George Christman <gc...@cardaddy.com>.
So I was able to get around this issue with the following code.

public String getPageLink(String context) {
        Link link =
linkSource.createPageRenderLinkWithContext(SomeClass.class, context);

        for(String param : link.getParameterNames()) {
            link.removeParameter(param);
        }
        return link.toURI();
}

On Tue, Nov 11, 2014 at 8:53 PM, George Christman <gc...@cardaddy.com>
wrote:

> So I've run into the same problem on a couple of occasions and I've yet to
> find a good work around either. Alejandro suggestion doesn't seem to work
> for me do to the fact my links are in the layout component and not the
> page. Anybody have any suggestions? I agree with Barry, although this may
> be helpful in some cases, it seems like a bug in others. If we could just
> add null to the parameter, then it would work perfectly for both sides.
>
> On Mon, May 13, 2013 at 8:49 AM, Barry Books <tr...@gmail.com> wrote:
>
>> Thanks,
>>
>> That does exactly what I needed. It appears to be called before the new
>> parameters are added so it lets you remove the defaults.
>>
>>
>> On Mon, May 13, 2013 at 7:27 AM, Alejandro Scandroli <
>> alejandroscandroli@gmail.com> wrote:
>>
>> > Hi Barry
>> >
>> > I've been using a different workaround for this and maybe it could help
>> > you.
>> > You can listen for the DECORATE_PAGE_RENDER_LINK and then "decorate" the
>> > link as you want.
>> > Add something like this to your page.
>> >
>> > @OnEvent(EventConstants.DECORATE_PAGE_RENDER_LINK)
>> > void decoratePageRenderLink(Link link, PageRenderRequestParameters
>> > parameters)
>> > {
>> > if (parameters.getLogicalPageName().equals("YOUR_LOGICAL_PAGE_NAME")) {
>> > for (String name : link.getParameterNames())
>> >  {
>> > link.removeParameter(name);
>> > }
>> > }
>> > }
>> >
>> > Cheers.
>> > Alejandro.
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > On Thu, May 9, 2013 at 2:44 PM, Barry Books <tr...@gmail.com> wrote:
>> >
>> > > I am using @ActivationRequestParameter and perhaps this is feature
>> under
>> > > some circumstances but currently it seems like a bug to me.
>> > >
>> > > In this case I have a menu item called 'All Prints' that goes to a
>> page
>> > > that might set ARP fields from a search. I'd like the menu link to
>> always
>> > > go to the page without any url parameters so that it will show All
>> > Prints.
>> > > If I just had a simple PageLink I could just set
>> > parameters="{'tag'='All'}"
>> > > but  the menu links come from a database so they can be dynamically
>> > added.
>> > > I did get it to work as I wanted by adding a context of 'All' the
>> > pagelink
>> > > and then set tag to null in begin render. The only think I don't like
>> > about
>> > > that is the URL ends up being:
>> > >
>> > > /studio/work/All?tag=Paris (best case would be /studio/work?tag=All
>> > which I
>> > > don't really care for either)
>> > >
>> > > I suspect I'll really fix this by hardcoding a URL in the database and
>> > just
>> > > using <a href="/studio/work/"> but that seems wrong.
>> > >
>> > > I guess it comes down to what PageLink should do. I view it as a way
>> to
>> > go
>> > > to some arbitrary page with a set of arguments I specify. I'm OK with
>> > > leaving context and parameters empty and Tapestry providing defaults
>> but
>> > it
>> > > seems like if I supply a value it should use that and only that. I
>> > suppose
>> > > there may be other cases where this functionality is useful but I
>> can't
>> > > think of any off hand. Perhaps if parameters="null" or parameters="{}"
>> > > would just remove all parameters that might be OK and would solve the
>> > > common case of:
>> > >
>> > > 1. A menu item linking to a page that shows a bunch of things
>> > > 2. The page has search parameters to narrow the list and uses ARP to
>> > store
>> > > them
>> > >
>> > > The menu link does not need to know (and should not know) what the
>> > possible
>> > > set of search criteria is, it just wants to turn them all off. The
>> search
>> > > page can handle them using EventLink to clear individual ones.
>> > >
>> > >
>> > >
>> > > On Wed, May 8, 2013 at 7:06 PM, Howard Lewis Ship <hl...@gmail.com>
>> > > wrote:
>> > >
>> > > > I suspect you are using @ActivationRequestParameter annotatations
>> and
>> > > that
>> > > > is the source of your "sticky" query parameters.
>> > > >
>> > > > It may be a bug that you explicitly supply an empt parameters map to
>> > the
>> > > > PageLink and it still adds the ARP in, but that is likely a feature.
>> > > >
>> > > > To accomplish what you want, you may need to set the ARP fields to
>> null
>> > > > inside beginRender().
>> > > >
>> > > >
>> > > >
>> > > > On Wed, May 8, 2013 at 6:02 AM, Barry Books <tr...@gmail.com>
>> wrote:
>> > > >
>> > > > > I've got a menu item generated from a database with a pagelink
>> like
>> > > this
>> > > > >
>> > > > > <t:pagelink page="prop:drop.page" context="dropContext"
>> > > > > style="${drop.style}"
>> > > > > >${drop.label}</t:pagelink>
>> > > > >
>> > > > >
>> > > > > I've added a search function to one of the linked pages that adds
>> > > > > parameters to the URL with
>> > > > >
>> > > > >
>> > > > > <t:pagelink ...  parameters="search">Page</t:pagelink>
>> > > > >
>> > > > >
>> > > > > I'd like to make the menu item clear the search so I tried this:
>> > > > >
>> > > > >
>> > > > > <t:pagelink page="prop:drop.page" context="dropContext"
>> style="${drop
>> > > > > .style}" parameters="{}">${drop.label}</t:pagelink>
>> > > > >
>> > > > >
>> > > > > but it does not work. It seems Tapestry is clever enough to always
>> > add
>> > > my
>> > > > > search criteria to the parameter map. This would be easy enough to
>> > fix
>> > > if
>> > > > > my menu was not driven from a database but I don't see an easy to
>> > make
>> > > my
>> > > > > generic menu know how to fix this.
>> > > > >
>> > > > >
>> > > > > It would seem useful to be able to say <t:pagelink ...
>> > > > > parameters="null">Page</t:pagelink> but parameters cannot be set
>> to
>> > > null.
>> > > > >
>> > > > >
>> > > > > Any suggestions?
>> > > > >
>> > > >
>> > > >
>> > > >
>> > > > --
>> > > > Howard M. Lewis Ship
>> > > >
>> > > > Creator of Apache Tapestry
>> > > >
>> > > > The source for Tapestry training, mentoring and support. Contact me
>> to
>> > > > learn how I can get you up and productive in Tapestry fast!
>> > > >
>> > > > (971) 678-5210
>> > > > http://howardlewisship.com
>> > > >
>> > >
>> >
>>
>
>
>
> --
> George Christman
> CEO
> www.CarDaddy.com
> P.O. Box 735
> Johnstown, New York
>
>


-- 
George Christman
CEO
www.CarDaddy.com
P.O. Box 735
Johnstown, New York