tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Howard M. Lewis Ship (JIRA)" <tapestry-...@jakarta.apache.org>
Subject [jira] Commented: (TAPESTRY-517) Using a FieldLabel component after the decorated form component causes the FieldLabel's id attribute to be wrong
Date Wed, 07 Sep 2005 00:56:31 GMT
    [ http://issues.apache.org/jira/browse/TAPESTRY-517?page=comments#action_12322790 ] 

Howard M. Lewis Ship commented on TAPESTRY-517:

When I say something is hard, it's because its HARD.

I do not want to introduce these code changes; I don't think they are the right approach (putting
special case casts in general purpose code is a bad design smell). 

I'm envisioning, for a future Tapestry, some more powerful mechanism to allow these components
to communicate (or to eliminate the need for them to do so).

> Using a FieldLabel component after the decorated form component causes the FieldLabel's
id attribute to be wrong
> ----------------------------------------------------------------------------------------------------------------
>          Key: TAPESTRY-517
>          URL: http://issues.apache.org/jira/browse/TAPESTRY-517
>      Project: Tapestry
>         Type: Bug
>   Components: Framework
>     Versions: 4.0
>     Reporter: Jonas Maurus
>     Assignee: Howard M. Lewis Ship
>  Attachments: AbstractFormComponent.clientid_fix.diff, AbstractFormComponent.clientid_fix_2.diff,
AbstractFormComponent.clientid_fix_3.diff, AbstractFormComponent.clientid_fix_4.diff, AbstractFormComponent.clientid_fix_cvs_HEAD_20050825_1358.diff,
> Quoting from TAPESTRY-409:
> <!-- page definition -->
>   <component id="bookkeeperRCB" type="Checkbox">
>     <binding name="selected" value="hasBookkeeperRole" />
>   </component>
>   <component id="adminRCB" type="Checkbox">
>     <binding name="selected" value="hasAdministratorRole" />
>   </component>
> <!-- page template -->
> <tr>
>   <td><input jwcid="bookkeeperRCB" type="checkbox" value="Y" /></td>
>   <td><label jwcid="@FieldLabel" for="bookkeeper"
>             field="ognl:components.bookkeeperRCB" displayName="message:form.roles.bookkeeper">Bookkeeper</label></td>
> </tr>
> <tr>
>   <td><input jwcid="adminRCB" type="checkbox" value="Y" /></td>
>   <td><label jwcid="@FieldLabel" for="admin"
>            field="ognl:components.adminRCB" displayName="message:form.roles.administrator">Administrator</label></td>
> </tr>
> yields:
> <tr>
>   <td><input type="checkbox" name="bookkeeperRCB" id="bookkeeperRCB" value="Y"/></td>
>   <td><label for="bookkeeperRCB$0">Bookkeeper</label></td>
> </tr>
> <tr>
>   <td><input type="checkbox" name="adminRCB" checked="checked" id="adminRCB"
>   <td><label for="adminRCB$0">Administrator</label></td>
> </tr>
> as you can see the generated fieldnames ("bookkeeperRCB$0"...) are wrong. This always
results in a stale-link exception.
> I tracked down the bug: FieldLabel calls prerenderField() which in turn causes an uniqueId
to be allocated in AbstractFormComponent.renderIdAttribute. Everything works out when the
FieldLabel precedes the form component it decorates. If it comes after the form component,
IRequestCycle.getUniqueId() will already have stored an id for the component and return a
new one.
> I'm not quite sure about the mechanics described above, as I don't fully understand FormSupportImpl
yet, perhaps someone else can shed light on this.
> However, the allocated client id wasn't cached properly in AbstractFormComponent.renderIdAttribute.
I'll attach a patch as soon as I've saved this bug report.

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

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

View raw message