Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-1312

Generic inter-component event mechanism

    Details

    • Type: New Feature
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.3.0-final
    • Fix Version/s: 1.5-M2.1
    • Component/s: wicket-extensions
    • Labels:
      None

      Description

      The attached patch provides a generic mechanism for transmitting inter-component events within a page. This has grown primarily from the need to repaint all relevant ajax components after an event, but can be used also in non-ajax environments such as after normal form submits.

      The basic idea is to fire an IVisitor on the page of the component sending an event, giving as an argument an event-specific listener interface that must be implemented by the components willing to receive the events. They can then do whatever they need such as add themselves to the AjaxRequestTarget that can be supplied in the event.

      Sometimes the basic Wicket mechanisms such as sharing a model are not enough; particularly repainting all relevant components in Ajax events gets tedious if the components are far away from each other in a complex DOM tree.

      The benefits of this approach are

      • loose coupling between the sending and receiving end
      • however, because of strong static typing it's easy enough to find with an IDE from where the events are broadcasted and where they are received
      • good testability (EventBroadcaster can be mocked on the sending end, and event handlers tested directly on the receiving end, possibly with mock events)
      • no need the keep references to Component instances or their paths (which could have been problematic on repeaters)

      (This is not a real observer or listener pattern implementation because the components cannot register and unregister themselves dynamically, but "registering" is handled statically on a class basis by implementing the relevant event receiver interface.)

        Attachments

        1. event-handler-with-testcase.zip
          5 kB
          Peter Ertl
        2. Generic_EventBroadcaster_glued_in_Component.patch
          34 kB
          Timo Rantalaiho
        3. Generic_EventBroadcaster.patch
          30 kB
          Timo Rantalaiho

          Issue Links

            Activity

              People

              • Assignee:
                ivaynberg Igor Vaynberg
                Reporter:
                thrantal Timo Rantalaiho
              • Votes:
                15 Vote for this issue
                Watchers:
                16 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: