When binding incoming request parameters, AbstractLink adds all incoming 
parameters to its own
parameter map.

Given the url: /page.htm?id=5&customer=John

will add both "id" and "customer" to the link parameter map:

assertEquals(5, link.getParameter("id")); // true
assertEquals("John", link.getParameter("customer")); // true

A problem I'm picking up when using AbstractLink to make Ajax GET requests is 
that all Ajax request
parameters are also added to the link parameters.

One solution could be to only bind parameters that was explicitly set before 
onProcess:
I think this will lead to confusion. AbstractLink behaves the way users were just too used to: to have all parameters bound.

> If the link is then sent back to the browser as a
> Partial result, the link renders the parameters sent as part of the
> Ajax request. On subsequent
> request the Ajax parameters will again be added to the link which
> grows unbounded.
Can you please give me examples when does the user need to send back the link as part of the Partial?

This could have an impact on existing apps if they rely on this behavior.
I think they really rely on this, since it's a default configuration that makes life easier, and also since this component is virtually in every Click Page that users have.

Thoughts?
What about: https://issues.apache.org/jira/browse/CLK-543

A new Link Control as described in the "Update part" of the issue would be better suited for Ajax operations and a clean start (with the explicit parameter use as you described), thus leaving the deprecated AbstractControl + descendants to work as before for the existing applications.

In a few versions, after the removal(or move out of Click) of those deprecated controls, it would lead to less fragmented controls and also a more predictable API.

Adrian.

Reply via email to