Repository: wicket Updated Branches: refs/heads/wicket-6.x 73a384435 -> f0a1a0683
WICKET-5753 It is impossible to determine the form submitting component's inputName when AjaxFormSubmitBehavior is used (cherry picked from commit 2f04133d67883c263482d83fbcccc83013477b7f) Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f0a1a068 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f0a1a068 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f0a1a068 Branch: refs/heads/wicket-6.x Commit: f0a1a068323575efc5198071224ec667e2dd5307 Parents: 73a3844 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:09:55 2014 +0200 ---------------------------------------------------------------------- .../ajax/form/AjaxFormSubmitBehavior.java | 98 +++++++++++++------- 1 file changed, 65 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/f0a1a068/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 9bedac6..6c4f57b 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); + } } /**
