You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2007/05/20 20:31:32 UTC

svn commit: r539905 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/form/AbstractSubmit.java java/org/apache/tapestry/form/FormSupportImpl.java js/tapestry/form.js test/org/apache/tapestry/form/FormSupportTest.java

Author: jkuhnert
Date: Sun May 20 11:31:31 2007
New Revision: 539905

URL: http://svn.apache.org/viewvc?view=rev&rev=539905
Log:
Fixes TAPESTRY-1216.  Submit modes for refresh / cancel weren't handling async logic at all.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form.js
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java?view=diff&rev=539905&r1=539904&r2=539905
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java Sun May 20 11:31:31 2007
@@ -14,26 +14,19 @@
 
 package org.apache.tapestry.form;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IDynamicInvoker;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
+import org.apache.tapestry.*;
 import org.apache.tapestry.engine.DirectServiceParameter;
 import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.json.JSONObject;
 import org.apache.tapestry.listener.ListenerInvoker;
 import org.apache.tapestry.util.ScriptUtils;
 
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Superclass for components submitting their form.
  * 
@@ -123,8 +116,9 @@
         
         Map parms = null;
         JSONObject json = null;
+        List update = getUpdateComponents();
         
-        if (isAsync()) {
+        if (isAsync() || (update != null && update.size() > 0)) {
             
             IForm form = getForm();
             
@@ -134,7 +128,7 @@
             
             json = new JSONObject();
             
-            json.put("async", isAsync());
+            json.put("async", Boolean.TRUE);
             json.put("json", isJson());
             
             DirectServiceParameter dsp = 
@@ -144,7 +138,8 @@
         }
         
         if (!type.equals(FormConstants.SUBMIT_NORMAL)) {
-            if (!isParameterBound("onClick")) {
+            if (!isParameterBound("onClick")
+                && (!isAsync() && (update == null || update.size() == 0))) {
                 
                 StringBuffer str = new StringBuffer();
                 
@@ -159,6 +154,7 @@
                 str.append(")");
                 
                 writer.attribute("onClick", str.toString());
+                return;
             } else {
                 if (parms == null) {
                     parms = new HashMap();

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java?view=diff&rev=539905&r1=539904&r2=539905
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java Sun May 20 11:31:31 2007
@@ -608,7 +608,7 @@
         BrowserEvent event = new BrowserEvent(_cycle);
         
         _form.getEventInvoker().invokeFormListeners(this, _cycle, event);
-        
+
         int expected = _allocatedIds.size();
         
         // The other case, _allocatedIdIndex > expected, is
@@ -624,9 +624,18 @@
         }
         
         runDeferredRunnables();
-        
-        if (_submitModes.contains(mode))
+
+        if (_submitModes.contains(mode)) {
+
+            // clear errors during refresh
+            
+            if (FormConstants.SUBMIT_REFRESH.equals(mode)) {
+
+                _form.getDelegate().clearErrors();
+            }
+
             return mode;
+        }
         
         // Either something wacky on the client side, or a client without
         // javascript enabled.

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form.js?view=diff&rev=539905&r1=539904&r2=539905
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form.js Sun May 20 11:31:31 2007
@@ -218,7 +218,7 @@
 	setFormValidating:function(formId, validate){
 		if (this.forms[formId]){
 			this.forms[formId].validateForm = validate;
-		}
+        }
 	},
 	
 	/**
@@ -230,8 +230,8 @@
 			dojo.raise("No valid form event found with argument: " + evt);
 			return;
 		}
-		
-		var id=evt.target.getAttribute("id");
+
+        var id=evt.target.getAttribute("id");
 		if (!id) {
 			dojo.raise("Form had no id attribute.");
 			return;
@@ -276,14 +276,15 @@
 		if (submitName){
 			form.submitname.value=submitName;
 		}
-		
-		if (!dj_undef("value", form.submitmode)
-			&& (form.submitmode.value == "cancel" || form.submitmode.value == "refresh")) {
-			form.submit();
-			return;
-		}
-		
-		if (!tapestry.form.validation.validateForm(form, this.forms[id])) {
+
+        if (!dj_undef("value", form.submitmode)
+                && (form.submitmode.value == "cancel" || form.submitmode.value == "refresh")
+                && !parms) {
+            form.submit();
+            return;
+        }
+
+        if (!tapestry.form.validation.validateForm(form, this.forms[id])) {
 			return;
 		}
 		
@@ -310,17 +311,28 @@
 	 * 	submitName	- 	Optional submit name string to use when submitting. This is used
 	 * 					to associate a form submission with a particular component, like a
 	 * 					Submit/LinkSubmit/etc..
+	 *  parms       -   Optional object parms passed through to tapestry.form.submit().
 	 */
-	cancel:function(form, submitName){
+	cancel:function(form, submitName, parms){
 		form=dojo.byId(form);
 		if (!form){
 			dojo.raise("Form not found with id " + form);
 			return;
 		}
-		
-		form.submitmode.value="cancel";
-		
-		this.submit(form, submitName);
+
+        var formName=form.getAttribute("id");
+        var validateState=tapestry.form.forms[formName].validateForm;
+        tapestry.form.setFormValidating(formName, false);
+        
+        form.submitmode.value="cancel";
+
+        if (parms && !dj_undef("async", parms) && parms.async){
+            this.submitAsync(form, null, submitName, parms);
+        } else {
+            this.submit(form, submitName, parms);
+        }
+        
+        tapestry.form.setFormValidating(formName, validateState);
 	},
 	
 	/**
@@ -335,18 +347,29 @@
 	 * 	submitName	- 	Optional submit name string to use when submitting. This is used
 	 * 					to associate a form submission with a particular component, like a
 	 * 					Submit/LinkSubmit/etc..
+	 *  parms       -   Optional object parms passed through to tapestry.form.submit().
 	 */
-	refresh:function(form, submitName){
+	refresh:function(form, submitName, parms){
 		form=dojo.byId(form);
 		if (!form){
 			dojo.raise("Form not found with id " + form);
 			return;
 		}
-		
-		form.submitmode.value="refresh";
-		
-		this.submit(form, submitName);
-	},
+
+        var formName=form.getAttribute("id");
+        var validateState=tapestry.form.forms[formName].validateForm;
+        tapestry.form.setFormValidating(formName, false);
+        
+        form.submitmode.value="refresh";
+
+        if (parms && !dj_undef("async", parms) && parms.async){
+            this.submitAsync(form, null, submitName, parms);
+        } else {
+            this.submit(form, submitName, parms);
+        }
+        
+        tapestry.form.setFormValidating(formName, validateState);
+    },
 	
 	/**
 	 * Function: submitAsync

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java?view=diff&rev=539905&r1=539904&r2=539905
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java Sun May 20 11:31:31 2007
@@ -14,26 +14,9 @@
 
 package org.apache.tapestry.form;
 
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
-
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.NestedMarkupWriter;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.StaleLinkException;
-import org.apache.tapestry.TapestryUtils;
+import org.apache.tapestry.*;
 import org.apache.tapestry.engine.ILink;
 import org.apache.tapestry.event.BrowserEvent;
 import org.apache.tapestry.event.EventTarget;
@@ -41,8 +24,12 @@
 import org.apache.tapestry.listener.ListenerInvoker;
 import org.apache.tapestry.services.ResponseBuilder;
 import org.apache.tapestry.valid.IValidationDelegate;
-import org.testng.annotations.Test;
+import static org.easymock.EasyMock.*;
 import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Tests for {@link org.apache.tapestry.form.FormSupportImpl}.
@@ -684,7 +671,9 @@
         trainExtractBrowserEvent(cycle);
         
         invoker.invokeFormListeners(eq(fs), eq(cycle), isA(BrowserEvent.class));
-        
+
+        delegate.clearErrors();
+
         replay();
 
         assertEquals(FormConstants.SUBMIT_REFRESH, fs.rewind());