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 [EMAIL PROTECTED] 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());


Reply via email to