Chris,

In case you haven't seen it, I explored some of the issues of Grid, filtering, 
and AJAX here: 

        
http://jumpstart.doublenegative.com.au/jumpstart7/together/ajaxcomponentscrud/persons

Don't know if there are any useful ideas in there for you.

Geoff

On 14/03/2014, at 8:15 PM, Chris Poulsen wrote:

> Hi,
> 
> This is a well timed discussion ;-)
> 
> I've been spending some time creating a grid version that supports
> filtering and not uses @Persist internally. I have been forced to create a
> new Select to get context support, I've decided not to create context
> support for the grid until it is actually needed.
> 
> I do not see Select as a scaffolding component in the same category as
> grid, Select has a pretty narrow scope while it is most likely impossible
> to make a grid that provides everything that everyone need.
> 
> If it is the thought that everyone should override the Select component to
> get context support, it would be nice if it was more trivial to
> extend/modify the core/Select.
> 
> -- 
> Chris
> 
> 
> On Fri, Mar 14, 2014 at 9:53 AM, Dusko Jovanovski <dusk...@gmail.com> wrote:
> 
>> You are absolutely right. Context for Select and Grid would be a welcome
>> addition. Even though these are only scaffolding components that are meant
>> to be extended and modified to fit your use cases, most people use them as
>> they are. There may be some other components that need this addition, but
>> none come to mind at the moment.
>> 
>> 
>> On Fri, Mar 14, 2014 at 3:32 AM, Geoff Callender <
>> geoff.callender.jumpst...@gmail.com> wrote:
>> 
>>> To all Tapestry devs,
>>> 
>>> Please, I want your thoughts before I file a JIRA, just in case I have my
>>> wires crossed.
>>> 
>>> I'm thinking that Tapestry has real problems working with complex AJAX
>>> pages because there are AJAX components that don't have a context
>>> parameter.
>>> 
>>> The problem I see is that a deeply nested component, C, cannot handle an
>>> event from an AJAX sub-component unless C can reconstruct its context,
>> ie.
>>> C has to be able to restore its parameters. This has been solved in Form
>>> and EventLink by giving them a context parameter. eg.
>>> 
>>>    onPrepareForSubmit(Integer contextArg1) { etc. }
>>> 
>>>    onMyevent(Integer contextArg1) { etc. }
>>> 
>>> I routinely use this context to restore C's parameters, eg.
>>> 
>>>    @Parameter
>>>    private Integer parameter1;
>>> 
>>>    onPrepareForSubmit(Integer parameter1) {
>>>        this.parameter1 = parameter1;
>>>    }
>>> 
>>> But what about Select and Grid? Neither of them has a context.
>>> 
>>> Without a context, C can't handle 2 or more AJAX Select components. When
>>> one sends an event, C has no idea of the value of the other, nor of its
>> own
>>> parameters. A context would fix all of this.
>>> 
>>> Without a context, an inplace request from a GridPager can't remind C was
>>> currently selected or how the Grid was being filtered. The same goes for
>>> Grid column select events. (See
>>> https://issues.apache.org/jira/browse/TAP5-2297)
>>> 
>>> There are workarounds, but with a context I think we wouldn't need them:
>>> 
>>> 1. Use @Persist. Well, we all try to avoid this.
>>> 
>>> 2. Include C's parameters in the page's context and make sure they're
>>> passed down through every nested component down to C. But surely that's
>> not
>>> reasonable. What if the page is concerned with a Hospital, but in it our
>>> components drill down through a Ward to a Patient and C is concerned with
>>> the Patient's Diagnosis. Does it really make sense to pass diagnosisId in
>>> through the page context and down through all the in-between components?
>>> Following this logic, we could end up with every parameter of every
>>> component in the page context.
>>> 
>>> 3. Use activation request parameters, but it appears to me to be messy.
>>> @ActivationRequestParameters is only available at the page level, so
>> again
>>> we have to pass them all the way down. Even if we do this, it's a
>> nuisance
>>> to pass them all the way UP in the first place. And again we could end up
>>> with every parameter of every component being declared in the page.
>>> 
>>> 4. Perhaps C can get and set request parameters by hand, but why? Isn't a
>>> context better?
>>> 
>>> Am I seeing an issue that doesn't exist? Is there a better way?
>>> 
>>> Cheers,
>>> 
>>> Geoff
>>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tapestry.apache.org
For additional commands, e-mail: dev-h...@tapestry.apache.org

Reply via email to