Uploaded image for project: 'Tapestry'
  1. Tapestry
  2. TAPESTRY-1054

DojoAjaxResponseBuilder will never render FormComponents

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 4.1.1
    • 4.1.1
    • Framework
    • None

    Description

      DojoAjaxResponseBuilder uses the client id of a component to determine whether or not to render it (see the contains method). Form components (children of AbstractFormComponent) will always have a null client id at this point & hence will never be rendered.

      The form components seem to have a null client id because AbstractFormComponent has an abstract setClientId method. This causes tapestry to add a generated getClientId method that overrides the AbstractComponent.getClientId method. If you look at a form component in a debugger you can see the extra $clientId member variables that have been added to the concrete class.

      The AbstractFormComponent setClientId method is only invoked by renderIdAttribute. Obviously this happens after the DojoAjaxResponseBuilder calls getClientId to determine whether the component should be rendered.

      I think this can be fixed by removing the AbstractFormComponent setClientId method & adding a protected setClientId method to AbstractComponent (that just sets the _clientId member).

      This will result in DojoAjaxResponseBuilder calling AbstractComponent.getClientId & being returned the bound id or the IComponent.getId. Either of which should allow it to properly determine whether the component is supposed to be rendered or not.

      Attachments

        1. TapBug-1054.zip
          16 kB
          Ben Sommerville

        Activity

          People

            jkuhnert Jesse Kuhnert
            bpsommerville Ben Sommerville
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: