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());