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);
+               }
        }
 
        /**

Reply via email to