You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Jesse Kuhnert (JIRA)" <ta...@jakarta.apache.org> on 2006/07/28 04:01:15 UTC
[jira] Updated: (TAPESTRY-1023) Calling updateComponent in
@EventListener method on a component that is prerendered results in null
update
[ http://issues.apache.org/jira/browse/TAPESTRY-1023?page=all ]
Jesse Kuhnert updated TAPESTRY-1023:
------------------------------------
Fix Version/s: 4.1
> Calling updateComponent in @EventListener method on a component that is prerendered results in null update
> ----------------------------------------------------------------------------------------------------------
>
> Key: TAPESTRY-1023
> URL: http://issues.apache.org/jira/browse/TAPESTRY-1023
> Project: Tapestry
> Issue Type: Bug
> Components: Framework
> Affects Versions: 4.1
> Environment: Tapestery 4.1 Head, JBoss 4.0.4 GA, Windows XP
> Reporter: Ben Sommerville
> Assigned To: Jesse Kuhnert
> Fix For: 4.1
>
>
> I had a problem with @EventListener tonight but I'm not sure if this is a
> bug or ignorance on my part.
> (I am working with the latest 4.1 version from svn)
>
> First let me explain what I am trying to do....
> I have a form with several PropertySelection input fields on it. What I
> want to do is change the selectable options based on what has already been
> selected.
> e.g. Say the form has two select fields A & B
> A has options 1,2,3.
> If the value of A is 1, then B should have options 11, 12, 13
> If the value of A is 2, then B should have options 21, 22, 23
> If the value of A is 3, then B should have options 31, 32, 33
>
> Now in the page template the fields are defined as follows
>
> <div class="field">
> <label jwcid="@FieldLabel" field="component:A">Role</label>
> <input jwcid="A@PropertySelection" value="ognl:A" displayName="A"
> model="ognl:aModel"/>
> </div>
> <div class="field">
> <label jwcid="@FieldLabel" field="component:B">B</label>
> <input jwcid="B@PropertySelection" value="ognl:B" displayName="B"
> model="ognl:bModel"/>
> </div>
> To update the options displayed by B I defined the following method
> @EventListener(targets="A", events="onchange", submitForm ="form")
> public void selectA(IRequestCycle cycle) {
> bModel = .... New model for b based on value of A ....
> cycle.getResponseBuilder().updateComponent("b");
> }
>
> What I was expecting to happen was that when the value of A was changed then
> B would be rerendered with the new options based on A's value.
> What actually happened was that as soon as I changed the value of A then B
> was rendered with no options at all.
> After a bit of debugging I eventually worked out that what was happening
> was:
> - A's value was changed & the event listener was invoked
> - The model for B was updated correctly
> - The FieldLabel that refered to B was rendered with a NullWriter
> - this field label prerendered B (to get its id) with the NullWriter
> - B was rendered with a real writer but didn't output anything because it
> had been prerendered
> - The page was updated an empty B element (cause the NullWriter discards
> everything).
> To work around this I gave the FieldLabel (for B) an explicit id and added
> an updateComponent call for the this id. When I did this the page behaved
> as I was expecting.
> Now my question: Is this behaviour correct?
> Or have I approached the problem incorrectly?
> It seems a bit unintuitive, I would prefer B to render properly when I asked
> it to be updated, rather than having to update both it and the label.
> However I'm not sure how to get my desired behaviour. Maybe the
> DojoAjaxResponseBuilder could check the form prerender map after each
> component render and clear out any prerender's with null results....
> ...or maybe wiser heads can come up with a much more elegant solution :)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org