You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2021/02/25 18:18:30 UTC

[wicket] 02/02: WICKET-6868 ajax submit allow trigger submit on form

This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 24c67b33b383147191ac9a60564da7b01ac2360e
Author: Sven Meier <sv...@apache.org>
AuthorDate: Sat Feb 20 00:47:34 2021 +0100

    WICKET-6868 ajax submit allow trigger submit on form
---
 .../wicket/ajax/form/AjaxFormSubmitBehavior.java   | 26 ++++++++++++++++++++++
 .../wicket/ajax/markup/html/form/AjaxButton.java   | 17 ++++++++++++++
 .../ajax/markup/html/form/AjaxFallbackButton.java  | 17 ++++++++++++++
 .../examples/ajax/builtin/FileUploadPage.java      |  9 ++++++++
 4 files changed, 69 insertions(+)

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 0caca83..23137b1 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
@@ -19,6 +19,7 @@ package org.apache.wicket.ajax.form;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxCallListener;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes.Method;
 import org.apache.wicket.markup.html.form.Button;
@@ -139,6 +140,17 @@ public abstract class AjaxFormSubmitBehavior extends AjaxEventBehavior
 		}
 	}
 
+	/**
+	 * Controls whether or not a JS <code>submit</code> should be triggered on the submitting form.
+	 * False by default.
+	 * 
+	 * @return true if <code>submit</code> should be triggered, false otherwise
+	 */
+	protected boolean shouldTriggerJavaScriptSubmitEvent()
+	{
+		return false;
+	}
+
 	@Override
 	protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
 	{
@@ -165,6 +177,20 @@ public abstract class AjaxFormSubmitBehavior extends AjaxEventBehavior
 			String submittingComponentName = submittingComponent.getInputName();
 			attributes.setSubmittingComponentName(submittingComponentName);
 		}
+		
+		if (shouldTriggerJavaScriptSubmitEvent()) {
+			attributes.getAjaxCallListeners().add(new AjaxCallListener() {
+				@Override
+				public CharSequence getPrecondition(Component component)
+				{
+					return String.format("var p, f = jQuery('#%s'), fn = function(e) { p = e.isDefaultPrevented(); e.preventDefault(); };" //
+						+ "f.on('submit',fn);" //
+						+ "f.trigger('submit');" //
+						+ "f.off('submit',fn);" //
+						+ "return !p;", form.getMarkupId());
+				}
+			});
+		}
 	}
 
 	@Override
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
index b0b5139..1f460ac 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
@@ -135,6 +135,12 @@ public abstract class AjaxButton extends Button
 
 				AjaxButton.this.updateAjaxAttributes(attributes);
 			}
+			
+			@Override
+			protected boolean shouldTriggerJavaScriptSubmitEvent()
+			{
+				return AjaxButton.this.shouldTriggerJavaScriptSubmitEvent();
+			}
 
 			@Override
 			public boolean getDefaultProcessing()
@@ -150,6 +156,17 @@ public abstract class AjaxButton extends Button
 		};
 	}
 
+	/**
+	 * Controls whether or not a JS <code>submit</code> should be triggered on the submitting form.
+	 * False by default.
+	 * 
+	 * @return true if <code>submit</code> should be triggered, false otherwise
+	 */
+	protected boolean shouldTriggerJavaScriptSubmitEvent()
+	{
+		return false;
+	}
+
 	protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
 	{
 	}
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java
index 03ca2a2..62627ff 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java
@@ -116,9 +116,26 @@ public abstract class AjaxFallbackButton extends Button
 			{
 				return AjaxFallbackButton.this.getStatelessHint();
 			}
+			
+			@Override
+			protected boolean shouldTriggerJavaScriptSubmitEvent()
+			{
+				return AjaxFallbackButton.this.shouldTriggerJavaScriptSubmitEvent();
+			}
 		};
 	}
 
+	/**
+	 * Controls whether or not a JS <code>submit</code> should be triggered on the submitting form.
+	 * False by default.
+	 * 
+	 * @return true if <code>submit</code> should be triggered, false otherwise
+	 */
+	protected boolean shouldTriggerJavaScriptSubmitEvent()
+	{
+		return false;
+	}
+
 	protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
 	{
 	}
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
index 598efee..c7f25fb 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
@@ -98,6 +98,15 @@ public class FileUploadPage extends BasePage
 		{
 			private static final long serialVersionUID = 1L;
 
+			/**
+			 * Need to trigger submit to initiate progressbar. 
+			 */
+			@Override
+			protected boolean shouldTriggerJavaScriptSubmitEvent()
+			{
+				return true;
+			}
+			
 			@Override
 			protected void onSubmit(AjaxRequestTarget target)
 			{