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

New FormComponentUpdatingBehavior to replace wantOnSelectionChangedNotifications()

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 8.0.0-M4
    • 8.0.0-M6
    • wicket
    • None

    Description

      Several form components support notification via normal HTTP request when their value changes in the browser:

      • CheckBox
      • DropDownChoice
      • RadioChoice
      • CheckGroup/Check
      • RadioGroup/Radio

      I propose to move support for this feature into a new behavior "FormComponentUpdatingBehavior".
      This has the following advantages:

      • having to override #wantOnSelectionChangedNotifications() for #onSelectionChanged() to be triggered wasn't very intuitive
      • we minimize the API of these components (the two methods above and #onRequest())
      • we can simplify these components by removing from them this non-core concern (a legacy from the pre-Ajax era)
      • to use the feature users can add a behavior instead, to have a notification triggered on that behavior (similar to AjaxFormChoiceComponentUpdatingBehavior)
      • can be used for text components too

      I reused IFormSubmitter to submit the form (for SubmitLink too) so we can simplify Form now:

      • no need for the hidden field "_hf_0", used to transport the actual listener url - the form's action is changed instead
      • no need for #dispatchEvent(), used to schedule another request handler that triggers the component
      • #getJsForInterfaceUrl() is greatly simplified (renamed to #getJsForListenerUrl() now)

      Migration effort is manageable:

      new CheckBox("id", model) {
      	protected boolean wantOnSelectionChangedNotifications() {
      		return true;
              }
      
      	protected void onSelectionChanged(Boolean newSelection) {
      		// do something, page will be rerendered;
      	}
      };
      

      ... becomes:

      new CheckBox("id", model)
      .add(new FormComponentUpdatingBehavior() {
      	protected void onSelectionChanged() {
      		// do something, page will be rerendered;
      	}
      });
      

      Attachments

        Issue Links

          Activity

            People

              svenmeier Sven Meier
              svenmeier Sven Meier
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: