On Wed, Mar 29, 2017 at 11:41 AM, <[email protected]> wrote:
> WICKET-6348 move selection change into behavior
>
>
> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7f08fab8
> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7f08fab8
> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7f08fab8
>
> Branch: refs/heads/WICKET-6348-selection-change
> Commit: 7f08fab8fa4ab9146fb0504222bb354a8dd98b46
> Parents: 15573ca
> Author: Sven Meier <[email protected]>
> Authored: Wed Mar 29 11:40:33 2017 +0200
> Committer: Sven Meier <[email protected]>
> Committed: Wed Mar 29 11:40:33 2017 +0200
>
> ----------------------------------------------------------------------
> .../apache/wicket/markup/html/form/Check.java | 20 ---
> .../wicket/markup/html/form/CheckBox.java | 121 +---------------
> .../wicket/markup/html/form/CheckGroup.java | 91 +-----------
> .../wicket/markup/html/form/DropDownChoice.java | 119 +---------------
> .../apache/wicket/markup/html/form/Radio.java | 20 ---
> .../wicket/markup/html/form/RadioChoice.java | 126 +---------------
> .../wicket/markup/html/form/RadioGroup.java | 94 +-----------
> .../html/form/SelectionChangeBehavior.java | 142 +++++++++++++++++++
> .../wicket/util/tester/BaseWicketTester.java | 25 +++-
> .../apache/wicket/util/tester/FormTester.java | 27 +---
> .../org/apache/wicket/MockPageWithForm.java | 21 +--
> .../wicket/util/tester/FormTesterTest.java | 16 +--
> .../extensions/yui/calendar/DatesPage1.java | 20 +--
> .../yui/calendar/DatesPage1_ExpectedResult.html | 2 +-
> .../wicket/examples/compref/CheckGroupPage.html | 3 -
> .../wicket/examples/compref/CheckGroupPage.java | 14 +-
> .../apache/wicket/examples/dates/DatesPage.java | 14 +-
> .../wicket/examples/forminput/FormInput.java | 37 ++---
> .../wicket/examples/tree/AdvancedTreePage.java | 23 +--
> 19 files changed, 213 insertions(+), 722 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/markup/
> html/form/Check.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Check.java
> b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Check.java
> index 83fa278..6f7ff26 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/Check.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/Check.java
> @@ -24,7 +24,6 @@ import org.apache.wicket.WicketRuntimeException;
> import org.apache.wicket.markup.ComponentTag;
> import org.apache.wicket.markup.html.WebMarkupContainer;
> import org.apache.wicket.model.IModel;
> -import org.apache.wicket.request.mapper.parameter.PageParameters;
> import org.apache.wicket.util.string.Strings;
>
>
> @@ -195,25 +194,6 @@ public class Check<T> extends
> LabeledWebMarkupContainer implements IGenericCompo
> tag.put("checked", "checked");
> }
>
> - if (group.wantOnSelectionChangedNotifications())
> - {
> - // url that points to this components
> IOnChangeListener method
> - CharSequence url = group.urlForListener(new
> PageParameters());
> -
> - Form<?> form = group.findParent(Form.class);
> - if (form != null)
> - {
> - tag.put("onclick",
> form.getJsForListenerUrl(url));
> - }
> - else
> - {
> - // NOTE: do not encode the url as that
> would give invalid JavaScript
> - tag.put("onclick",
> "window.location.href='" + url +
> - (url.toString().indexOf('?') > -1
> ? "&" : "?") + group.getInputName() +
> - "=' + this.value;");
> - }
> - }
> -
> if (!isActionAuthorized(ENABLE) || !isEnabledInHierarchy()
> || !group.isEnabledInHierarchy())
> {
> tag.put(ATTR_DISABLED, ATTR_DISABLED);
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/markup/
> html/form/CheckBox.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
> b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/CheckBox.java
> index da8f049..f318060 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/CheckBox.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/CheckBox.java
> @@ -18,11 +18,8 @@ package org.apache.wicket.markup.html.form;
>
> import java.util.Locale;
>
> -import org.apache.wicket.IRequestListener;
> -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
> import org.apache.wicket.markup.ComponentTag;
> import org.apache.wicket.model.IModel;
> -import org.apache.wicket.request.mapper.parameter.PageParameters;
> import org.apache.wicket.util.convert.IConverter;
>
> /**
> @@ -42,10 +39,6 @@ import org.apache.wicket.util.convert.IConverter;
> *
> * </p>
> * <p>
> - * You can can extend this class and override method
> wantOnSelectionChangedNotifications() to force
> - * server roundtrips on each selection change.
> - * </p>
> - * <p>
> * A CheckBox always has a valid therefore values from methods
> * {@link FormComponent#setRequired(boolean)} and {@link
> FormComponent#isRequired()} are not taken
> * into account.
> @@ -53,7 +46,7 @@ import org.apache.wicket.util.convert.IConverter;
> *
> * @author Jonathan Locke
> */
> -public class CheckBox extends FormComponent<Boolean> implements
> IRequestListener
> +public class CheckBox extends FormComponent<Boolean>
> {
> private static final long serialVersionUID = 1L;
>
> @@ -77,96 +70,6 @@ public class CheckBox extends FormComponent<Boolean>
> implements IRequestListener
> }
>
> /**
> - * @see org.apache.wicket.markup.html.form.IOnChangeListener#
> onSelectionChanged()
> - */
> - @Override
> - public void onRequest()
> - {
> - Form<?> form = getForm();
> - if (form == null) {
> - convertInput();
> - updateModel();
> - onSelectionChanged(getModelObject());
> - } else {
> - form.onFormSubmitted(new IFormSubmitter()
> - {
> - @Override
> - public void onSubmit()
> - {
> - convertInput();
> - updateModel();
> - onSelectionChanged(
> getModelObject());
> - }
> -
> - @Override
> - public void onError()
> - {
> - }
> -
> - @Override
> - public void onAfterSubmit()
> - {
> - }
> -
> - @Override
> - public Form<?> getForm()
> - {
> - return CheckBox.this.getForm();
> - }
> -
> - @Override
> - public boolean getDefaultFormProcessing()
> - {
> - return false;
> - }
> - });
> - }
> - }
> -
> - /**
> - * Template method that can be overridden to be notified by value
> changes.
> - * {@link #wantOnSelectionChangedNotifications()} has to be
> overriden to return {@value true} for
> - * this method to being called.
> - * <p>
> - * This method does nothing by default.
> - *
> - * @param newSelection
> - * The newly selected object of the backing model NOTE
> this is the same as you would
> - * get by calling getModelObject() if the new selection
> were current
> - */
> - protected void onSelectionChanged(Boolean newSelection)
> - {
> - }
> -
> - /**
> - * Whether a request should be generated with each selection
> change, resulting in the
> - * model being updated (of just this component) and {@link
> #onSelectionChanged(Object)}
> - * being called. This method returns false by default.
> - * <p>
> - * Use an {@link AjaxFormComponentUpdatingBehavior} with
> <tt>change</tt> event,
> - * if you want to use Ajax instead.
> - *
> - * @return returns {@value false} by default, i.e. selection
> changes do not result in a request
> - */
> - protected boolean wantOnSelectionChangedNotifications()
> - {
> - return false;
> - }
> -
> - /**
> - * @see org.apache.wicket.MarkupContainer#getStatelessHint()
> - */
> - @Override
> - protected boolean getStatelessHint()
> - {
> - if (wantOnSelectionChangedNotifications())
> - {
> - return false;
> - }
> - return super.getStatelessHint();
> - }
> -
> - /**
> * Processes the component tag.
> *
> * @param tag
> @@ -197,28 +100,6 @@ public class CheckBox extends FormComponent<Boolean>
> implements IRequestListener
> // type="checkbox" value=""] will always submit as false
> tag.remove("value");
>
> - // Should a roundtrip be made (have onSelectionChanged
> called) when the
> - // checkbox is clicked?
> - if (wantOnSelectionChangedNotifications())
> - {
> - CharSequence url = urlForListener(new
> PageParameters());
> -
> - Form<?> form = findParent(Form.class);
> - if (form != null)
> - {
> - tag.put("onclick",
> form.getJsForListenerUrl(url));
> - }
> - else
> - {
> - // NOTE: do not encode the url as that
> would give invalid
> - // JavaScript
> - tag.put("onclick",
> "window.location.href='" + url +
> - (url.toString().indexOf('?') > -1
> ? "&" : "?") + getInputName() +
> - "=' + this.checked;");
> - }
> -
> - }
> -
> super.onComponentTag(tag);
> }
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/markup/
> html/form/CheckGroup.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java
> b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/CheckGroup.java
> index ead1823..e05b0d5 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/CheckGroup.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/CheckGroup.java
> @@ -19,9 +19,7 @@ package org.apache.wicket.markup.html.form;
> import java.util.Collection;
> import java.util.List;
>
> -import org.apache.wicket.IRequestListener;
> import org.apache.wicket.WicketRuntimeException;
> -import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatin
> gBehavior;
> import org.apache.wicket.markup.ComponentTag;
> import org.apache.wicket.markup.html.WebMarkupContainer;
> import org.apache.wicket.model.IModel;
> @@ -60,7 +58,7 @@ import org.slf4j.LoggerFactory;
> * @param <T>
> * The model object type
> */
> -public class CheckGroup<T> extends FormComponent<Collection<T>>
> implements IRequestListener
> +public class CheckGroup<T> extends FormComponent<Collection<T>>
> {
> private static final long serialVersionUID = 1L;
>
> @@ -201,91 +199,4 @@ public class CheckGroup<T> extends
> FormComponent<Collection<T>> implements IRequ
> tag.remove("disabled");
> tag.remove("name");
> }
> -
> - /**
> - * Called when a selection changes.
> - */
> - @Override
> - public final void onRequest()
> - {
> - Form<?> form = getForm();
> - if (form == null) {
> - convertInput();
> - updateModel();
> - onSelectionChanged(getModelObject());
> - } else {
> - form.onFormSubmitted(new IFormSubmitter()
> - {
> - @Override
> - public void onSubmit()
> - {
> - convertInput();
> - updateModel();
> - onSelectionChanged(
> getModelObject());
> - }
> -
> - @Override
> - public void onError()
> - {
> - }
> -
> - @Override
> - public void onAfterSubmit()
> - {
> - }
> -
> - @Override
> - public Form<?> getForm()
> - {
> - return CheckGroup.this.getForm();
> - }
> -
> - @Override
> - public boolean getDefaultFormProcessing()
> - {
> - return false;
> - }
> - });
> - }
> - }
> -
> - /**
> - * Template method that can be overridden to be notified by value
> changes.
> - * {@link #wantOnSelectionChangedNotifications()} has to be
> overriden to return {@value true} for
> - * this method to being called.
> - * <p>
> - * This method does nothing by default.
> - *
> - * @param newSelection
> - * The newly selected object of the backing model NOTE
> this is the same as you would
> - * get by calling getModelObject() if the new selection
> were current
> - */
> - protected void onSelectionChanged(final Collection<T> newSelection)
> - {
> - }
> -
> - /**
> - * Whether a request should be generated with each selection
> change, resulting in the
> - * model being updated (of just this component) and {@link
> #onSelectionChanged(Object)}
> - * being called. This method returns false by default.
> - * <p>
> - * Use an {@link AjaxFormChoiceComponentUpdatingBehavior} with
> <tt>change</tt> event,
> - * if you want to use Ajax instead.
> - *
> - * @return returns {@value false} by default, i.e. selection
> changes do not result in a request
> - */
> - protected boolean wantOnSelectionChangedNotifications()
> - {
> - return false;
> - }
> -
> - @Override
> - protected boolean getStatelessHint()
> - {
> - if (wantOnSelectionChangedNotifications())
> - {
> - return false;
> - }
> - return super.getStatelessHint();
> - }
> }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/markup/
> html/form/DropDownChoice.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/DropDownChoice.java
> b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/DropDownChoice.java
> index cee8851..a0bd6c4 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/DropDownChoice.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/DropDownChoice.java
> @@ -18,11 +18,8 @@ package org.apache.wicket.markup.html.form;
>
> import java.util.List;
>
> -import org.apache.wicket.IRequestListener;
> -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
> import org.apache.wicket.markup.ComponentTag;
> import org.apache.wicket.model.IModel;
> -import org.apache.wicket.request.mapper.parameter.PageParameters;
>
>
> /**
> @@ -52,11 +49,6 @@ import org.apache.wicket.request.mapper.parameter.
> PageParameters;
> *
> * </p>
> *
> - * <p>
> - * You can can extend this class and override method
> wantOnSelectionChangedNotifications() to force
> - * server roundtrips on each selection change.
> - * </p>
> - *
> * @author Jonathan Locke
> * @author Eelco Hillenius
> * @author Johan Compagner
> @@ -64,7 +56,7 @@ import org.apache.wicket.request.mapper.parameter.
> PageParameters;
> * @param <T>
> * The model object type
> */
> -public class DropDownChoice<T> extends AbstractSingleSelectChoice<T>
> implements IRequestListener
> +public class DropDownChoice<T> extends AbstractSingleSelectChoice<T>
> {
> private static final long serialVersionUID = 1L;
>
> @@ -204,53 +196,6 @@ public class DropDownChoice<T> extends
> AbstractSingleSelectChoice<T> implements
> }
>
> /**
> - * Called when a selection changes.
> - */
> - @Override
> - public final void onRequest()
> - {
> - Form<?> form = getForm();
> - if (form == null) {
> - convertInput();
> - updateModel();
> - onSelectionChanged(getModelObject());
> - } else {
> - form.getRootForm().onFormSubmitted(new
> IFormSubmitter()
> - {
> - @Override
> - public void onSubmit()
> - {
> - convertInput();
> - updateModel();
> - onSelectionChanged(
> getModelObject());
> - }
> -
> - @Override
> - public void onError()
> - {
> - }
> -
> - @Override
> - public void onAfterSubmit()
> - {
> - }
> -
> - @Override
> - public Form<?> getForm()
> - {
> - return
> DropDownChoice.this.getForm();
> - }
> -
> - @Override
> - public boolean getDefaultFormProcessing()
> - {
> - return false;
> - }
> - });
> - }
> - }
> -
> - /**
> * Processes the component tag.
> *
> * @param tag
> @@ -262,68 +207,6 @@ public class DropDownChoice<T> extends
> AbstractSingleSelectChoice<T> implements
> {
> checkComponentTag(tag, "select");
>
> - // Should a roundtrip be made (have onSelectionChanged
> called) when the
> - // selection changed?
> - if (wantOnSelectionChangedNotifications())
> - {
> - CharSequence url = urlForListener(new
> PageParameters());
> -
> - Form<?> form = findParent(Form.class);
> - if (form != null)
> - {
> - tag.put("onchange",
> form.getJsForListenerUrl(url.toString()));
> - }
> - else
> - {
> - tag.put("onchange",
> "window.location.href='" + url +
> - (url.toString().indexOf('?') > -1
> ? "&" : "?") + getInputName() +
> - "=' + this.options[this.
> selectedIndex].value;");
> - }
> - }
> -
> super.onComponentTag(tag);
> }
> -
> - /**
> - * Template method that can be overridden to be notified by value
> changes.
> - * {@link #wantOnSelectionChangedNotifications()} has to be
> overriden to return {@value true} for
> - * this method to being called.
> - * <p>
> - * This method does nothing by default.
> - *
> - * @param newSelection
> - * The newly selected object of the backing model NOTE
> this is the same as you would
> - * get by calling getModelObject() if the new selection
> were current
> - */
> - protected void onSelectionChanged(final T newSelection)
> - {
> - }
> -
> - /**
> - * Whether a request should be generated with each selection
> change, resulting in the
> - * model being updated (of just this component) and {@link
> #onSelectionChanged(Object)}
> - * being called. This method returns false by default.
> - * <p>
> - * Use an {@link AjaxFormComponentUpdatingBehavior} with
> <tt>change</tt> event,
> - * if you want to use Ajax instead.
> - *
> - * @return returns {@value false} by default, i.e. selection
> changes do not result in a request
> - */
> - protected boolean wantOnSelectionChangedNotifications()
> - {
> - return false;
> - }
> -
> - /**
> - * {@inheritDoc}
> - */
> - @Override
> - protected boolean getStatelessHint()
> - {
> - if (wantOnSelectionChangedNotifications())
> - {
> - return false;
> - }
> - return super.getStatelessHint();
> - }
> }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/markup/
> html/form/Radio.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Radio.java
> b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Radio.java
> index 1c38c11..df26e56 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/Radio.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/Radio.java
> @@ -22,7 +22,6 @@ import org.apache.wicket.WicketRuntimeException;
> import org.apache.wicket.markup.ComponentTag;
> import org.apache.wicket.markup.html.WebMarkupContainer;
> import org.apache.wicket.model.IModel;
> -import org.apache.wicket.request.mapper.parameter.PageParameters;
>
> /**
> * Component representing a single radio choice in a
> org.apache.wicket.markup.html.form.RadioGroup.
> @@ -180,25 +179,6 @@ public class Radio<T> extends
> LabeledWebMarkupContainer implements IGenericCompo
> tag.put("checked", "checked");
> }
>
> - if (group.wantOnSelectionChangedNotifications())
> - {
> - // url that points to this components
> IOnChangeListener method
> - CharSequence url = group.urlForListener(new
> PageParameters());
> -
> - Form<?> form = group.findParent(Form.class);
> - if (form != null)
> - {
> - tag.put("onclick",
> form.getJsForListenerUrl(url));
> - }
> - else
> - {
> - // NOTE: do not encode the url as that
> would give invalid JavaScript
> - tag.put("onclick",
> "window.location.href='" + url +
> - (url.toString().indexOf('?') > -1
> ? "&" : "?") + group.getInputName() +
> - "=' + this.value;");
> - }
> - }
> -
> if (!isEnabledInHierarchy())
> {
> tag.put(ATTR_DISABLED, ATTR_DISABLED);
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/markup/
> html/form/RadioChoice.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
> b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/RadioChoice.java
> index 13b8b33..3994204 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/RadioChoice.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/RadioChoice.java
> @@ -19,12 +19,9 @@ package org.apache.wicket.markup.html.form;
> import java.util.List;
> import java.util.Map;
>
> -import org.apache.wicket.IRequestListener;
> -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
> import org.apache.wicket.markup.ComponentTag;
> import org.apache.wicket.markup.MarkupStream;
> import org.apache.wicket.model.IModel;
> -import org.apache.wicket.request.mapper.parameter.PageParameters;
> import org.apache.wicket.settings.DebugSettings;
> import org.apache.wicket.util.convert.IConverter;
> import org.apache.wicket.util.lang.Args;
> @@ -56,18 +53,13 @@ import org.apache.wicket.util.value.IValueMap;
> *
> * </p>
> *
> - * <p>
> - * You can extend this class and override method
> wantOnSelectionChangedNotifications() to force
> - * server roundtrips on each selection change.
> - * </p>
> - *
> * @author Jonathan Locke
> * @author Igor Vaynberg (ivaynberg)
> *
> * @param <T>
> * The model object type
> */
> -public class RadioChoice<T> extends AbstractSingleSelectChoice<T>
> implements IRequestListener
> +public class RadioChoice<T> extends AbstractSingleSelectChoice<T>
> {
> private static final long serialVersionUID = 1L;
>
> @@ -247,96 +239,6 @@ public class RadioChoice<T> extends
> AbstractSingleSelectChoice<T> implements IRe
> }
>
> /**
> - * @see org.apache.wicket.markup.html.form.IOnChangeListener#
> onSelectionChanged()
> - */
> - @Override
> - public void onRequest()
> - {
> - Form<?> form = getForm();
> - if (form == null) {
> - convertInput();
> - updateModel();
> - onSelectionChanged(getModelObject());
> - } else {
> - form.onFormSubmitted(new IFormSubmitter()
> - {
> - @Override
> - public void onSubmit()
> - {
> - convertInput();
> - updateModel();
> - onSelectionChanged(
> getModelObject());
> - }
> -
> - @Override
> - public void onError()
> - {
> - }
> -
> - @Override
> - public void onAfterSubmit()
> - {
> - }
> -
> - @Override
> - public Form<?> getForm()
> - {
> - return RadioChoice.this.getForm();
> - }
> -
> - @Override
> - public boolean getDefaultFormProcessing()
> - {
> - return false;
> - }
> - });
> - }
> - }
> -
> - /**
> - * Template method that can be overridden to be notified by value
> changes.
> - * {@link #wantOnSelectionChangedNotifications()} has to be
> overriden to return {@value true} for
> - * this method to being called.
> - * <p>
> - * This method does nothing by default.
> - *
> - * @param newSelection
> - * The newly selected object of the backing model NOTE
> this is the same as you would
> - * get by calling getModelObject() if the new selection
> were current
> - */
> - protected void onSelectionChanged(T newSelection)
> - {
> - }
> -
> - /**
> - * Whether a request should be generated with each selection
> change, resulting in the
> - * model being updated (of just this component) and {@link
> #onSelectionChanged(Object)}
> - * being called. This method returns false by default.
> - * <p>
> - * Use an {@link AjaxFormComponentUpdatingBehavior} with
> <tt>change</tt> event,
> - * if you want to use Ajax instead.
> - *
> - * @return returns {@value false} by default, i.e. selection
> changes do not result in a request
> - */
> - protected boolean wantOnSelectionChangedNotifications()
> - {
> - return false;
> - }
> -
> - /**
> - * @see org.apache.wicket.MarkupContainer#getStatelessHint()
> - */
> - @Override
> - protected boolean getStatelessHint()
> - {
> - if (wantOnSelectionChangedNotifications())
> - {
> - return false;
> - }
> - return super.getStatelessHint();
> - }
> -
> - /**
> * @return Prefix to use before choice
> */
> public String getPrefix()
> @@ -561,32 +463,6 @@ public class RadioChoice<T> extends
> AbstractSingleSelectChoice<T> implements IRe
> .append(Strings.escapeMarkup(idAttr))
> .append('"');
>
> - // Should a roundtrip be made (have
> onSelectionChanged called)
> - // when the option is clicked?
> - if (wantOnSelectionChangedNotifications())
> - {
> - CharSequence url = urlForListener(new
> PageParameters());
> -
> - Form<?> form = findParent(Form.class);
> - if (form != null)
> - {
> - buffer.append(" onclick=\"")
> - .append(form.
> getJsForListenerUrl(url))
> - .append(";\"");
> - }
> - else
> - {
> - // NOTE: do not encode the url as
> that would give
> - // invalid JavaScript
> - buffer.append("
> onclick=\"window.location.href='")
> - .append(url)
> -
> .append((url.toString().indexOf('?')
> > -1 ? '&' : '?') + getInputName())
> - .append('=')
> -
> .append(Strings.escapeMarkup(id))
> - .append("';\"");
> - }
> - }
> -
> // Allows user to add attributes to the <input..>
> tag
> {
> IValueMap attrs =
> getAdditionalAttributes(index, choice);
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/markup/
> html/form/RadioGroup.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java
> b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/RadioGroup.java
> index 51778a4..ac5ca4a 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/RadioGroup.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/RadioGroup.java
> @@ -16,9 +16,7 @@
> */
> package org.apache.wicket.markup.html.form;
>
> -import org.apache.wicket.IRequestListener;
> import org.apache.wicket.WicketRuntimeException;
> -import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatin
> gBehavior;
> import org.apache.wicket.markup.ComponentTag;
> import org.apache.wicket.markup.html.WebMarkupContainer;
> import org.apache.wicket.model.IModel;
> @@ -49,7 +47,7 @@ import org.apache.wicket.util.visit.IVisitor;
> * @param <T>
> * The model object type
> */
> -public class RadioGroup<T> extends FormComponent<T> implements
> IRequestListener
> +public class RadioGroup<T> extends FormComponent<T>
> {
> private static final long serialVersionUID = 1L;
>
> @@ -73,34 +71,6 @@ public class RadioGroup<T> extends FormComponent<T>
> implements IRequestListener
> setRenderBodyOnly(true);
> }
>
> - /**
> - * Whether a request should be generated with each selection
> change, resulting in the
> - * model being updated (of just this component) and {@link
> #onSelectionChanged(Object)}
> - * being called. This method returns false by default.
> - * <p>
> - * Use an {@link AjaxFormChoiceComponentUpdatingBehavior} with
> <tt>change</tt> event,
> - * if you want to use Ajax instead.
> - *
> - * @return returns {@value false} by default, i.e. selection
> changes do not result in a request
> - */
> - protected boolean wantOnSelectionChangedNotifications()
> - {
> - return false;
> - }
> -
> - /**
> - * @see org.apache.wicket.MarkupContainer#getStatelessHint()
> - */
> - @Override
> - protected boolean getStatelessHint()
> - {
> - if (wantOnSelectionChangedNotifications())
> - {
> - return false;
> - }
> - return super.getStatelessHint();
> - }
> -
> @Override
> protected String getModelValue()
> {
> @@ -174,66 +144,4 @@ public class RadioGroup<T> extends FormComponent<T>
> implements IRequestListener
> tag.remove("disabled");
> tag.remove("name");
> }
> -
> - /**
> - * Called when a selection changes.
> - */
> - @Override
> - public final void onRequest()
> - {
> - Form<?> form = getForm();
> - if (form == null) {
> - convertInput();
> - updateModel();
> - onSelectionChanged(getModelObject());
> - } else {
> - form.onFormSubmitted(new IFormSubmitter()
> - {
> - @Override
> - public void onSubmit()
> - {
> - convertInput();
> - updateModel();
> - onSelectionChanged(
> getModelObject());
> - }
> -
> - @Override
> - public void onError()
> - {
> - }
> -
> - @Override
> - public void onAfterSubmit()
> - {
> - }
> -
> - @Override
> - public Form<?> getForm()
> - {
> - return RadioGroup.this.getForm();
> - }
> -
> - @Override
> - public boolean getDefaultFormProcessing()
> - {
> - return false;
> - }
> - });
> - }
> - }
> -
> - /**
> - * Template method that can be overridden to be notified by value
> changes.
> - * {@link #wantOnSelectionChangedNotifications()} has to be
> overriden to return {@value true} for
> - * this method to being called.
> - * <p>
> - * This method does nothing by default.
> - *
> - * @param newSelection
> - * The newly selected object of the backing model NOTE
> this is the same as you would
> - * get by calling getModelObject() if the new selection
> were current
> - */
> - protected void onSelectionChanged(final T newSelection)
> - {
> - }
> }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/markup/html/form/
> SelectionChangeBehavior.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/SelectionChangeBehavior.java b/wicket-core/src/main/java/
> org/apache/wicket/markup/html/form/SelectionChangeBehavior.java
> new file mode 100644
> index 0000000..8943d12
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/SelectionChangeBehavior.java
> @@ -0,0 +1,142 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements. See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.wicket.markup.html.form;
> +
> +import org.apache.wicket.Component;
> +import org.apache.wicket.IRequestListener;
> +import org.apache.wicket.behavior.Behavior;
> +import org.apache.wicket.markup.ComponentTag;
> +import org.apache.wicket.request.mapper.parameter.PageParameters;
> +
> +public class SelectionChangeBehavior extends Behavior implements
> IRequestListener
>
Misses javadoc
> +{
> +
> + private FormComponent<?> formComponent;
> +
> + @Override
> + public boolean getStatelessHint(Component component)
> + {
> + return false;
> + }
> +
> + @Override
> + public void bind(Component component)
> + {
>
In some other behavior we check the type of the component and throw
WicketRuntimeException with clear message.
Here it might fail with ClassCastException
> + this.formComponent = (FormComponent<?>)component;
> +
> + formComponent.setRenderBodyOnly(false);
> + }
> +
> + public FormComponent<?> getFormComponent()
>
This method could be 'final'.
If someone overrides it (s)he may wonder why it is not used below.
Making it 'final' will reduce the questions, I think.
> + {
> + return formComponent;
> + }
> +
> + @Override
> + public void onComponentTag(Component component, ComponentTag tag)
> + {
> + CharSequence url = component.urlForListener(this, new
> PageParameters());
> +
> + String event = getJSEvent();
> +
> + String condition = String.format("if (event.target.name
> !== '%s') return; ", formComponent.getInputName());
> +
> + Form<?> form = component.findParent(Form.class);
> + if (form != null)
> + {
> + tag.put(event, condition +
> form.getJsForListenerUrl(url.toString()));
> + }
> + else
> + {
> + char separator = url.toString().indexOf('?') > -1
> ? '&' : '?';
> +
> + tag.put(event,
> + condition +
> String.format("window.location.href='%s%s%s='
> + %s;", url, separator, formComponent.getInputName(), getJSValue()));
> + }
> + }
> +
> +
> + private String getJSEvent()
> + {
> + if (formComponent instanceof DropDownChoice) {
>
What about ListMultipleChoice ?
> + return "onchange";
> + } else {
> + return "onclick";
> + }
> + }
> +
> + private String getJSValue()
> + {
> + if (formComponent instanceof DropDownChoice) {
> + return "this.options[this.selectedIndex].value";
> + } else if (formComponent instanceof CheckBox) {
> + return "this.checked";
> + } else {
> + return "event.target.value";
> + }
> + }
> +
> + private void process() {
> + formComponent.convertInput();
> + formComponent.updateModel();
> + onSelectionChanged();
> + }
> +
> + protected void onSelectionChanged()
> + {
> + }
> +
> + @Override
> + public final void onRequest()
> + {
> + Form<?> form = formComponent.findParent(Form.class);
> + if (form == null) {
> + process();
> + } else {
> + form.getRootForm().onFormSubmitted(new
> IFormSubmitter()
> + {
> + @Override
> + public void onSubmit()
> + {
> + process();
> + }
> +
> + @Override
> + public void onError()
> + {
> + }
> +
> + @Override
> + public void onAfterSubmit()
> + {
> + }
> +
> + @Override
> + public Form<?> getForm()
> + {
> + return formComponent.getForm();
> + }
> +
> + @Override
> + public boolean getDefaultFormProcessing()
> + {
> + return false;
> + }
> + });
> + }
> + }
> +}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/util/
> tester/BaseWicketTester.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
> b/wicket-core/src/main/java/org/apache/wicket/util/tester/
> BaseWicketTester.java
> index d7cdf4e..ec7f5aa 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/util/tester/
> BaseWicketTester.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/
> BaseWicketTester.java
> @@ -60,6 +60,7 @@ import org.apache.wicket.ajax.markup.html.AjaxLink;
> import org.apache.wicket.ajax.markup.html.IAjaxLink;
> import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
> import org.apache.wicket.behavior.AbstractAjaxBehavior;
> +import org.apache.wicket.behavior.Behavior;
> import org.apache.wicket.core.request.handler.
> BookmarkableListenerRequestHandler;
> import org.apache.wicket.core.request.handler.
> BookmarkablePageRequestHandler;
> import org.apache.wicket.core.request.handler.IPageProvider;
> @@ -121,7 +122,6 @@ import org.apache.wicket.request.
> mapper.IRequestMapperDelegate;
> import org.apache.wicket.request.mapper.parameter.PageParameters;
> import org.apache.wicket.request.resource.IResource;
> import org.apache.wicket.request.resource.ResourceReference;
> -import org.apache.wicket.session.ISessionStore.UnboundListener;
> import org.apache.wicket.settings.ApplicationSettings;
> import org.apache.wicket.settings.RequestCycleSettings.RenderStrategy;
> import org.apache.wicket.util.lang.Args;
> @@ -1138,6 +1138,29 @@ public class BaseWicketTester
> }
>
> /**
> + * Simulates invoking an {@link IRequestListener} on a component.
> As opposed to the
> + * {@link #executeListener(Component)} method, current
> request/response objects will be used
> + *
> + * After the listener is invoked the page containing the component
> will be rendered
> + * (with an optional redirect - depending on {@link
> RenderStrategy}).
> + *
> + * @param component
> + * @param listener
> + */
> + public void invokeListener(Component component, final Behavior
> behavior)
> + {
> + Args.notNull(component, "component");
> + Args.notNull(behavior, "behavior");
> +
> + // there are two ways to do this. RequestCycle could be
> forced to call the handler
> + // directly but constructing and parsing the URL increases
> the chance of triggering bugs
> + IRequestHandler handler = new ListenerRequestHandler(new
> PageAndComponentProvider(
>
- IRequestListener
- #invokeListener
- ListenerRequestHandler
Three different names for the same thing.
IMO we should use the same name in all of them, e.g.
#invokeRequestListener() and RequestListenerHandler (ListenerRequestHandler
will extend from RLH and be deprecated in 8.x)
Also there is #executeListener(Component) - sometimes "execute", sometimes
"invoke". I vote for 'execute' - there are several others with this prefix
in their names.
WDYT ?
> + component.getPage(), component),
> component.getBehaviorId(behavior));
> +
> + processRequest(handler);
> + }
> +
> + /**
> * Builds and processes a request suitable for executing an
> <code>AbstractAjaxBehavior</code>.
> *
> * @param behavior
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/main/java/org/apache/wicket/util/
> tester/FormTester.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
> b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
> index 8bb2760..31448d9 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/util/tester/
> FormTester.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/
> FormTester.java
> @@ -38,6 +38,7 @@ import org.apache.wicket.markup.html.
> form.IFormSubmittingComponent;
> import org.apache.wicket.markup.html.form.ListMultipleChoice;
> import org.apache.wicket.markup.html.form.Radio;
> import org.apache.wicket.markup.html.form.RadioGroup;
> +import org.apache.wicket.markup.html.form.SelectionChangeBehavior;
> import org.apache.wicket.markup.html.form.upload.FileUploadField;
> import org.apache.wicket.markup.html.form.upload.MultiFileUploadField;
> import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
> @@ -505,29 +506,9 @@ public class FormTester
> ChoiceSelector choiceSelector =
> choiceSelectorFactory.create(component);
> choiceSelector.doSelect(index);
>
> - try
> - {
> - Method wantOnSelectionChangedNotificationsMethod
> = component.getClass()
> - .getDeclaredMethod("
> wantOnSelectionChangedNotifications");
> -
> - try
> - {
> - wantOnSelectionChangedNotifica
> tionsMethod.setAccessible(true);
> - boolean wantOnSelectionChangedNotifications
> = (Boolean)wantOnSelectionChangedNotificationsMethod.invoke(component);
> - if (wantOnSelectionChangedNotifications)
> - {
> - tester.invokeListener(component);
> - }
> - }
> - catch (final Exception x)
> - {
> - throw new RuntimeException(x);
> - }
> -
> - }
> - catch (final NoSuchMethodException ignored)
> - {
> - // this form component has no auto page reload
> mechanism
> + List<SelectionChangeBehavior> behaviors =
> component.getBehaviors(SelectionChangeBehavior.class);
> + if (behaviors.isEmpty() == false) {
> + tester.invokeListener(component,
> behaviors.get(0));
>
What if there are more than one behaviors of this type ?
Should we execute all of them ?!
> }
>
> return this;
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/test/java/org/apache/wicket/MockPageWithForm.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/MockPageWithForm.java
> b/wicket-core/src/test/java/org/apache/wicket/MockPageWithForm.java
> index 75cdb92..4b8e706 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/MockPageWithForm.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/MockPageWithForm.java
> @@ -22,6 +22,7 @@ import java.util.List;
> import org.apache.wicket.markup.html.WebPage;
> import org.apache.wicket.markup.html.form.DropDownChoice;
> import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.markup.html.form.SelectionChangeBehavior;
> import org.apache.wicket.model.Model;
>
>
> @@ -60,26 +61,14 @@ public class MockPageWithForm extends WebPage
> List<String> list = new ArrayList<String>();
> list.add("Select me");
> MyForm form = new MyForm("form");
> - DropDownChoice<String> dropDown = new
> DropDownChoice<String>("dropdown",
> - new Model<String>(), list)
> - {
> - private static final long serialVersionUID = 1L;
> -
> + DropDownChoice<String> dropDown = new
> DropDownChoice<String>("dropdown", new Model<String>(), list);
> + dropDown.add(new SelectionChangeBehavior() {
> @Override
> - protected void onSelectionChanged(String
> newSelection)
> + protected void onSelectionChanged()
> {
> selected = true;
> }
> -
> - /**
> - * @see org.apache.wicket.markup.html.
> form.DropDownChoice#wantOnSelectionChangedNotifications()
> - */
> - @Override
> - protected boolean wantOnSelectionChangedNotifica
> tions()
> - {
> - return true;
> - }
> - };
> + });
>
>
> form.add(dropDown);
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-core/src/test/java/org/apache/wicket/util/
> tester/FormTesterTest.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
> b/wicket-core/src/test/java/org/apache/wicket/util/tester/
> FormTesterTest.java
> index 7500653..945e46e 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/util/tester/
> FormTesterTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/util/tester/
> FormTesterTest.java
> @@ -28,6 +28,7 @@ import org.apache.wicket.markup.
> IMarkupResourceStreamProvider;
> import org.apache.wicket.markup.html.WebPage;
> import org.apache.wicket.markup.html.form.DropDownChoice;
> import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.markup.html.form.SelectionChangeBehavior;
> import org.apache.wicket.markup.html.form.upload.FileUpload;
> import org.apache.wicket.model.Model;
> import org.apache.wicket.request.mapper.parameter.PageParameters;
> @@ -264,20 +265,13 @@ public class FormTesterTest extends WicketTestCase
> Form<Object> form = new Form<>("form");
> add(form);
> List<String> choices = Arrays.asList("opt
> 1", "opt 2");
> - form.add(new
> DropDownChoice<String>("selector",
> Model.of(""), choices)
> - {
> + form.add(new
> DropDownChoice<String>("selector",
> Model.of(""), choices).add(new SelectionChangeBehavior() {
> @Override
> - protected boolean
> wantOnSelectionChangedNotifications()
> + protected void onSelectionChanged()
> {
> - return true;
> + selection =
> (String)getFormComponent().getDefaultModelObject();
> }
> -
> - @Override
> - protected void
> onSelectionChanged(final String newSelection)
> - {
> - selection = newSelection;
> - }
> - });
> + }));
> }
>
> @Override
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-datetime/src/test/java/org/apache/wicket/
> extensions/yui/calendar/DatesPage1.java
> ----------------------------------------------------------------------
> diff --git a/wicket-datetime/src/test/java/org/apache/wicket/
> extensions/yui/calendar/DatesPage1.java b/wicket-datetime/src/test/
> java/org/apache/wicket/extensions/yui/calendar/DatesPage1.java
> index da0d26d..43f4067 100644
> --- a/wicket-datetime/src/test/java/org/apache/wicket/
> extensions/yui/calendar/DatesPage1.java
> +++ b/wicket-datetime/src/test/java/org/apache/wicket/
> extensions/yui/calendar/DatesPage1.java
> @@ -31,6 +31,7 @@ import org.apache.wicket.markup.html.WebPage;
> import org.apache.wicket.markup.html.form.ChoiceRenderer;
> import org.apache.wicket.markup.html.form.DropDownChoice;
> import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.markup.html.form.SelectionChangeBehavior;
> import org.apache.wicket.markup.html.link.Link;
> import org.apache.wicket.markup.html.panel.FeedbackPanel;
> import org.apache.wicket.model.IModel;
> @@ -109,6 +110,8 @@ public class DatesPage1 extends WebPage
> });
> setChoiceRenderer(new LocaleChoiceRenderer());
> setDefaultModel(new PropertyModel<>(DatesPage1.this,
> "selectedLocale"));
> +
> + add(new SelectionChangeBehavior());
> }
>
> @Override
> @@ -116,23 +119,6 @@ public class DatesPage1 extends WebPage
> {
> return super.getModelValue();
> }
> -
> - /**
> - * @see org.apache.wicket.markup.html.form.DropDownChoice#
> onSelectionChanged(java.lang.Object)
> - */
> - @Override
> - public void onSelectionChanged(Locale newSelection)
> - {
> - }
> -
> - /**
> - * @see org.apache.wicket.markup.html.form.DropDownChoice#
> wantOnSelectionChangedNotifications()
> - */
> - @Override
> - protected boolean wantOnSelectionChangedNotifications()
> - {
> - return true;
> - }
> }
>
> private static final Locale LOCALE_EN = new Locale("en");
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-datetime/src/test/java/org/apache/wicket/
> extensions/yui/calendar/DatesPage1_ExpectedResult.html
> ----------------------------------------------------------------------
> diff --git a/wicket-datetime/src/test/java/org/apache/wicket/
> extensions/yui/calendar/DatesPage1_ExpectedResult.html
> b/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/
> DatesPage1_ExpectedResult.html
> index d365128..9bc873a 100644
> --- a/wicket-datetime/src/test/java/org/apache/wicket/
> extensions/yui/calendar/DatesPage1_ExpectedResult.html
> +++ b/wicket-datetime/src/test/java/org/apache/wicket/
> extensions/yui/calendar/DatesPage1_ExpectedResult.html
> @@ -106,7 +106,7 @@ Wicket.Event.publish(Wicket.Event.Topic.AJAX_HANDLERS_
> BOUND);
> </head>
> <body>
> <form wicket:id="localeForm" id="localeForm2" method="post"
> action="./org.apache.wicket.extensions.yui.calendar.
> DatesPage1?0-1.-localeForm">
> -<p><select wicket:id="localeSelect" onchange="var f =
> document.getElementById('localeForm2');
> f.action='./org.apache.wicket.extensions.yui.
> calendar.DatesPage1?0-1.-localeForm-localeSelect';f.submit();"
> name="localeSelect">
> +<p><select wicket:id="localeSelect" name="localeSelect" onchange="if (
> event.target.name !== 'localeSelect') return; var f =
> document.getElementById('localeForm2');
> f.action='./org.apache.wicket.extensions.yui.
> calendar.DatesPage1?0-1.0-localeForm-localeSelect';f.submit();">
> <option value="0">cinese (Cina) (Chinese (China))</option>
> <option value="1">cinese (Cina) (Chinese (China))</option>
> <option value="2">cinese (Cina) (Chinese (China))</option>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-examples/src/main/java/org/apache/wicket/examples/compref/
> CheckGroupPage.html
> ----------------------------------------------------------------------
> diff --git a/wicket-examples/src/main/java/org/apache/wicket/
> examples/compref/CheckGroupPage.html b/wicket-examples/src/main/
> java/org/apache/wicket/examples/compref/CheckGroupPage.html
> index b10bf3f..260a2c7 100644
> --- a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/
> CheckGroupPage.html
> +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/
> CheckGroupPage.html
> @@ -14,13 +14,11 @@
> A CheckBoxGroup and CheckBoxComponnet components let users select
> multiple values from a group of checkboxes. These components are more
> flexible then the CheckBoxMultipleChoice component in that individual
> checkboxes are full components, unlike with CheckBoxMultipleChoice, and
> thus can be used anywhere in the markup.
> </p>
> <p>
> - <form wicket:id="form">
> <span wicket:id="group">
> <table style="border: 2px dotted #fc0; width:
> 400px; padding: 5px;">
> <tr>
> <td valign="top">Select persons</td>
> <td>
> - <input type="checkbox"
> wicket:id="groupselector">check/uncheck all</input><br/>
> <table cellspacing="0" cellpadding="2">
> <tr>
> <td><b>Select</b></td>
> @@ -44,7 +42,6 @@
> </tr>
> </table>
> </span>
> - </form>
> <span wicket:id="feedback">feedbackmessages will be put
> here</span>
> </p>
> <span wicket:id="explainPanel">panel contents come here</span>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-examples/src/main/java/org/apache/wicket/examples/compref/
> CheckGroupPage.java
> ----------------------------------------------------------------------
> diff --git a/wicket-examples/src/main/java/org/apache/wicket/
> examples/compref/CheckGroupPage.java b/wicket-examples/src/main/
> java/org/apache/wicket/examples/compref/CheckGroupPage.java
> index 738920e..12c99fb 100644
> --- a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/
> CheckGroupPage.java
> +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/
> CheckGroupPage.java
> @@ -24,6 +24,7 @@ import org.apache.wicket.markup.html.form.Check;
> import org.apache.wicket.markup.html.form.CheckGroup;
> import org.apache.wicket.markup.html.form.CheckGroupSelector;
> import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.markup.html.form.SelectionChangeBehavior;
> import org.apache.wicket.markup.html.list.ListItem;
> import org.apache.wicket.markup.html.list.ListView;
> import org.apache.wicket.markup.html.panel.FeedbackPanel;
> @@ -43,18 +44,9 @@ public class CheckGroupPage extends WicketExamplePage
> public CheckGroupPage()
> {
> final CheckGroup<Person> group = new CheckGroup<>("group",
> new ArrayList<Person>());
> - Form<Void> form = new Form<Void>("form")
> - {
> - @Override
> - protected void onSubmit()
> - {
> - info("selected person(s): " + group.
> getDefaultModelObjectAsString());
> - }
> - };
> + group.add(new SelectionChangeBehavior());
>
> - add(form);
> - form.add(group);
> - group.add(new CheckGroupSelector("groupselector"));
> + add(group);
> ListView<Person> persons = new ListView<Person>("persons",
> ComponentReferenceApplication.getPersons())
> {
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-examples/src/main/java/org/apache/wicket/
> examples/dates/DatesPage.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-examples/src/main/java/org/apache/wicket/examples/dates/DatesPage.java
> b/wicket-examples/src/main/java/org/apache/wicket/
> examples/dates/DatesPage.java
> index 73d9b44..eaaaed2 100644
> --- a/wicket-examples/src/main/java/org/apache/wicket/
> examples/dates/DatesPage.java
> +++ b/wicket-examples/src/main/java/org/apache/wicket/
> examples/dates/DatesPage.java
> @@ -34,6 +34,7 @@ import org.apache.wicket.extensions.
> yui.calendar.TimeField;
> import org.apache.wicket.markup.html.form.ChoiceRenderer;
> import org.apache.wicket.markup.html.form.DropDownChoice;
> import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.markup.html.form.SelectionChangeBehavior;
> import org.apache.wicket.markup.html.link.Link;
> import org.apache.wicket.markup.html.panel.FeedbackPanel;
> import org.apache.wicket.model.IModel;
> @@ -100,17 +101,8 @@ public class DatesPage extends WicketExamplePage
> });
> setChoiceRenderer(new LocaleChoiceRenderer());
> setDefaultModel(new PropertyModel<>(DatesPage.this,
> "selectedLocale"));
> - }
> -
> - @Override
> - public void onSelectionChanged(Locale newSelection)
> - {
> - }
> -
> - @Override
> - protected boolean wantOnSelectionChangedNotifications()
> - {
> - return true;
> +
> + add(new SelectionChangeBehavior());
> }
> }
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-examples/src/main/java/org/apache/wicket/
> examples/forminput/FormInput.java
> ----------------------------------------------------------------------
> diff --git a/wicket-examples/src/main/java/org/apache/wicket/
> examples/forminput/FormInput.java b/wicket-examples/src/main/
> java/org/apache/wicket/examples/forminput/FormInput.java
> index 8e3fb4b..ecc3414 100644
> --- a/wicket-examples/src/main/java/org/apache/wicket/
> examples/forminput/FormInput.java
> +++ b/wicket-examples/src/main/java/org/apache/wicket/
> examples/forminput/FormInput.java
> @@ -35,6 +35,7 @@ import org.apache.wicket.markup.html.
> form.ListMultipleChoice;
> import org.apache.wicket.markup.html.form.Radio;
> import org.apache.wicket.markup.html.form.RadioChoice;
> import org.apache.wicket.markup.html.form.RadioGroup;
> +import org.apache.wicket.markup.html.form.SelectionChangeBehavior;
> import org.apache.wicket.markup.html.form.SimpleFormComponentLabel;
> import org.apache.wicket.markup.html.form.TextField;
> import org.apache.wicket.markup.html.link.Link;
> @@ -248,29 +249,21 @@ public class FormInput extends WicketExamplePage
> // set the model that gets the current locale, and
> that is used for
> // updating the current locale to property
> 'locale' of FormInput
> setModel(new PropertyModel<>(FormInput.this,
> "locale"));
> - }
> -
> - @Override
> - public void onSelectionChanged(Locale newSelection)
> - {
> - // note that we don't have to do anything here, as
> our property
> - // model already calls FormInput.setLocale when
> the model is
> - // updated
> -
> - // force re-render by setting the page to render
> to the bookmarkable
> - // instance, so that the page will be rendered
> from scratch,
> - // re-evaluating the input patterns etc
> - setResponsePage(FormInput.class);
> - }
> +
> + add(new SelectionChangeBehavior() {
> + @Override
> + protected void onSelectionChanged()
> + {
> + // note that we don't have to do
> anything here, as our property
> + // model already calls
> FormInput.setLocale when the model is
> + // updated
>
> - /**
> - * @see org.apache.wicket.markup.html.form.DropDownChoice#
> wantOnSelectionChangedNotifications()
> - */
> - @Override
> - protected boolean wantOnSelectionChangedNotifications()
> - {
> - // we want round-trips when a the user selects
> another item
> - return true;
> + // force re-render by setting the
> page to render to the bookmarkable
> + // instance, so that the page will
> be rendered from scratch,
> + // re-evaluating the input
> patterns etc
> + setResponsePage(FormInput.class);
> + }
> + });
> }
> }
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 7f08fab8/wicket-examples/src/main/java/org/apache/wicket/examples/tree/
> AdvancedTreePage.java
> ----------------------------------------------------------------------
> diff --git a/wicket-examples/src/main/java/org/apache/wicket/
> examples/tree/AdvancedTreePage.java b/wicket-examples/src/main/
> java/org/apache/wicket/examples/tree/AdvancedTreePage.java
> index b33b075..4522885 100644
> --- a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/
> AdvancedTreePage.java
> +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/
> AdvancedTreePage.java
> @@ -43,6 +43,7 @@ import org.apache.wicket.markup.html.form.Button;
> import org.apache.wicket.markup.html.form.ChoiceRenderer;
> import org.apache.wicket.markup.html.form.DropDownChoice;
> import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.markup.html.form.SelectionChangeBehavior;
> import org.apache.wicket.markup.html.link.Link;
> import org.apache.wicket.model.IModel;
> import org.apache.wicket.model.PropertyModel;
> @@ -97,28 +98,10 @@ public abstract class AdvancedTreePage extends
> AbstractTreePage
> form.add(tree);
>
> form.add(new DropDownChoice<Content>("content", new
> PropertyModel<>(this, "content"),
> - initContents(), new ChoiceRenderer<>("class.
> simpleName"))
> - {
> - private static final long serialVersionUID = 1L;
> -
> - @Override
> - protected boolean wantOnSelectionChangedNotifica
> tions()
> - {
> - return true;
> - }
> - });
> + initContents(), new
> ChoiceRenderer<>("class.simpleName")).add(new
> SelectionChangeBehavior()));
>
> form.add(new DropDownChoice<Behavior>("theme", new
> PropertyModel<>(this, "theme"),
> - initThemes(), new ChoiceRenderer<>("class.
> simpleName"))
> - {
> - private static final long serialVersionUID = 1L;
> -
> - @Override
> - protected boolean wantOnSelectionChangedNotifica
> tions()
> - {
> - return true;
> - }
> - });
> + initThemes(), new
> ChoiceRenderer<>("class.simpleName")).add(new
> SelectionChangeBehavior()));
>
> form.add(new Link<Void>("expandAll")
> {
>
>