Repository: wicket Updated Branches: refs/heads/master bcea89fc8 -> 2f04133d6
WICKET-5753 It is impossible to determine the form submitting component's inputName when AjaxFormSubmitBehavior is used Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2f04133d Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2f04133d Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2f04133d Branch: refs/heads/master Commit: 2f04133d67883c263482d83fbcccc83013477b7f Parents: bcea89f Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Tue Nov 18 10:08:27 2014 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Tue Nov 18 10:08:27 2014 +0200 ---------------------------------------------------------------------- .../ajax/form/AjaxFormSubmitBehavior.java | 98 +++++++++++++------- 1 file changed, 65 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/2f04133d/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java index 1ad09cb..c734e9b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java @@ -84,7 +84,6 @@ public abstract class AjaxFormSubmitBehavior extends AjaxEventBehavior } /** - * * @return Form that will be submitted by this behavior */ public final Form<?> getForm() @@ -105,6 +104,21 @@ public abstract class AjaxFormSubmitBehavior extends AjaxEventBehavior } /** + * @return the bound component if it implements {@link org.apache.wicket.markup.html.form.IFormSubmittingComponent}, + * otherwise - {@code null} + */ + private IFormSubmittingComponent getFormSubmittingComponent() + { + IFormSubmittingComponent submittingComponent = null; + Component component = getComponent(); + if (component instanceof IFormSubmittingComponent) + { + submittingComponent = ((IFormSubmittingComponent) component); + } + return submittingComponent; + } + + /** * Finds form that will be submitted * * @return form to submit or {@code null} if none found @@ -143,51 +157,69 @@ public abstract class AjaxFormSubmitBehavior extends AjaxEventBehavior attributes.setMethod(Method.POST); } - if (getComponent() instanceof IFormSubmittingComponent) + IFormSubmittingComponent submittingComponent = getFormSubmittingComponent(); + if (submittingComponent != null) { - String submittingComponentName = ((IFormSubmittingComponent)getComponent()).getInputName(); + String submittingComponentName = submittingComponent.getInputName(); attributes.setSubmittingComponentName(submittingComponentName); } } - /** - * @see org.apache.wicket.ajax.AjaxEventBehavior#onEvent(org.apache.wicket.ajax.AjaxRequestTarget) - */ @Override protected void onEvent(final AjaxRequestTarget target) { - getForm().getRootForm().onFormSubmitted(new IFormSubmitter() + getForm().getRootForm().onFormSubmitted(new AjaxFormSubmitter(this, target)); + } + + /** + * A publicly reachable class that allows to introspect the submitter, e.g. to + * check what is the input name of the submitting component if there is such. + */ + public static class AjaxFormSubmitter implements IFormSubmitter + { + private final AjaxFormSubmitBehavior submitBehavior; + private final AjaxRequestTarget target; + + private AjaxFormSubmitter(AjaxFormSubmitBehavior submitBehavior, AjaxRequestTarget target) { - @Override - public Form<?> getForm() - { - return AjaxFormSubmitBehavior.this.getForm(); - } + this.submitBehavior = submitBehavior; + this.target = target; + } - @Override - public boolean getDefaultFormProcessing() - { - return AjaxFormSubmitBehavior.this.getDefaultProcessing(); - } + @Override + public Form<?> getForm() + { + return submitBehavior.getForm(); + } - @Override - public void onError() - { - AjaxFormSubmitBehavior.this.onError(target); - } + public IFormSubmittingComponent getFormSubmittingComponent() + { + return submitBehavior.getFormSubmittingComponent(); + } - @Override - public void onSubmit() - { - AjaxFormSubmitBehavior.this.onSubmit(target); - } + @Override + public boolean getDefaultFormProcessing() + { + return submitBehavior.getDefaultProcessing(); + } - @Override - public void onAfterSubmit() - { - AjaxFormSubmitBehavior.this.onAfterSubmit(target); - } - }); + @Override + public void onError() + { + submitBehavior.onError(target); + } + + @Override + public void onSubmit() + { + submitBehavior.onSubmit(target); + } + + @Override + public void onAfterSubmit() + { + submitBehavior.onAfterSubmit(target); + } } /**
