Author: hlship
Date: Wed Oct 20 23:46:20 2010
New Revision: 1025793

URL: http://svn.apache.org/viewvc?rev=1025793&view=rev
Log:
TAP5-538: Allow client-side validation when focus lost on field ("blur"), when 
form submits, or not at all

Added:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/ClientValidation.java
   (with props)
Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditRemoveReorder.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditorDemo.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ValidBeanEditorDemo.java

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/ClientValidation.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/ClientValidation.java?rev=1025793&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/ClientValidation.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/ClientValidation.java
 Wed Oct 20 23:46:20 2010
@@ -0,0 +1,41 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.corelib;
+
+/**
+ * Controls if and how client-side form input validation occurs. For 
compatibility with Tapestry 5.1,
+ * a coercion from "true" to {...@link #BLUR} and from "false" to {...@link 
#NONE} are added (though these
+ * may be removed some time after Tapestry 5.2).
+ * 
+ * @since 5.2.2
+ */
+public enum ClientValidation
+{
+    /**
+     * Fields validate as the user tabs out of them ("onblur" client side 
event), as well as when the form submits. This
+     * is the default behavior.
+     */
+    BLUR,
+
+    /**
+     * Fields only validate when the form submits (validation errors will 
prevent the form from actually submitting).
+     */
+    SUBMIT,
+
+    /**
+     * Client-side validation is disabled.
+     */
+    NONE;
+}

Propchange: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/ClientValidation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java?rev=1025793&r1=1025792&r2=1025793&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
 Wed Oct 20 23:46:20 2010
@@ -27,6 +27,7 @@ import org.apache.tapestry5.annotations.
 import org.apache.tapestry5.annotations.OnEvent;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.corelib.ClientValidation;
 import org.apache.tapestry5.corelib.internal.ComponentActionSink;
 import org.apache.tapestry5.corelib.internal.FormSupportImpl;
 import org.apache.tapestry5.corelib.internal.InternalFormSupport;
@@ -46,6 +47,7 @@ import org.apache.tapestry5.ioc.internal
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.ioc.util.ExceptionUtils;
 import org.apache.tapestry5.ioc.util.IdAllocator;
+import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.services.ClientBehaviorSupport;
 import org.apache.tapestry5.services.ClientDataEncoder;
@@ -54,6 +56,7 @@ import org.apache.tapestry5.services.Env
 import org.apache.tapestry5.services.FormSupport;
 import org.apache.tapestry5.services.Heartbeat;
 import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.javascript.InitializationPriority;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 import org.slf4j.Logger;
 
@@ -160,16 +163,11 @@ public class Form implements ClientEleme
     private boolean clientLogicDefaultEnabled;
 
     /**
-     * If true (the default) then client validation is enabled for the form, 
and
-     * the default set of JavaScript libraries
-     * (Prototype, Scriptaculous and the Tapestry library) will be added to the
-     * rendered page, and the form will
-     * register itself for validation. This may be turned off when client
-     * validation is not desired; for example, when
-     * many validations are used that do not operate on the client side at all.
+     * Controls when client validation occurs on the client, if at all. 
Defaults to {...@link ClientValidation#BLUR}.
      */
-    @Parameter
-    private boolean clientValidation = clientLogicDefaultEnabled;
+    @Parameter(allowNull = false, defaultPrefix = BindingConstants.LITERAL)
+    private ClientValidation clientValidation = clientLogicDefaultEnabled ? 
ClientValidation.BLUR
+            : ClientValidation.NONE;
 
     /**
      * If true (the default), then the JavaScript will be added to position the
@@ -383,6 +381,8 @@ public class Form implements ClientEleme
 
         formSupport = createRenderTimeFormSupport(clientId, actionSink, 
allocator);
 
+        addJavaScriptInitialization();
+
         if (zone != null)
             linkFormToZone(link);
 
@@ -412,7 +412,7 @@ public class Form implements ClientEleme
 
         form = writer.element("form", "id", clientId, "method", "post", 
"action", actionURL);
 
-        if ((zone != null || clientValidation) && !request.isXHR())
+        if ((zone != null || clientValidation != ClientValidation.NONE) && 
!request.isXHR())
             writer.attributes("onsubmit", MarkupConstants.WAIT_FOR_PAGE);
 
         resources.renderInformalParameters(writer);
@@ -432,6 +432,16 @@ public class Form implements ClientEleme
         environment.peek(Heartbeat.class).begin();
     }
 
+    private void addJavaScriptInitialization()
+    {
+        JSONObject validateSpec = new JSONObject().put("blur", 
clientValidation == ClientValidation.BLUR).put("submit",
+                clientValidation != ClientValidation.NONE);
+
+        JSONObject spec = new JSONObject("formId", clientId).put("validate", 
validateSpec);
+
+        javascriptSupport.addInitializerCall(InitializationPriority.EARLY, 
"formEventManager", spec);
+    }
+
     @HeartbeatDeferred
     private void linkFormToZone(Link link)
     {
@@ -460,8 +470,8 @@ public class Form implements ClientEleme
     InternalFormSupport createRenderTimeFormSupport(String clientId, 
ComponentActionSink actionSink,
             IdAllocator allocator)
     {
-        return new FormSupportImpl(resources, clientId, actionSink, 
clientBehaviorSupport, clientValidation, allocator,
-                validationId);
+        return new FormSupportImpl(resources, clientId, actionSink, 
clientBehaviorSupport,
+                clientValidation != ClientValidation.NONE, allocator, 
validationId);
     }
 
     void afterRender(MarkupWriter writer)

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=1025793&r1=1025792&r2=1025793&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 Wed Oct 20 23:46:20 2010
@@ -40,6 +40,7 @@ import org.apache.tapestry5.ajax.MultiZo
 import org.apache.tapestry5.annotations.*;
 import org.apache.tapestry5.annotations.ContentType;
 import org.apache.tapestry5.beaneditor.Validate;
+import org.apache.tapestry5.corelib.ClientValidation;
 import org.apache.tapestry5.corelib.LoopFormState;
 import org.apache.tapestry5.corelib.SubmitMode;
 import org.apache.tapestry5.corelib.data.BlankOption;
@@ -1217,8 +1218,18 @@ public final class TapestryModule
                 return calendar;
             }
         }));
+
+        // Add support for "true" and "false", for compatibility with Tapestry 
5.1 and earlier.
+        // These aliases may be removed in some later release.
+
+        StringToEnumCoercion<ClientValidation> 
stringToClientValidationCoercion = StringToEnumCoercion
+                .create(ClientValidation.class).addAlias("true", 
ClientValidation.BLUR)
+                .addAlias("false", ClientValidation.NONE);
+
+        configuration.add(CoercionTuple.create(String.class, 
ClientValidation.class, stringToClientValidationCoercion));
     }
 
+    @SuppressWarnings("rawtypes")
     private static <T extends Enum> void add(Configuration<CoercionTuple> 
configuration, Class<T> enumType)
     {
         configuration.add(CoercionTuple.create(String.class, enumType, 
StringToEnumCoercion.create(enumType)));

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js?rev=1025793&r1=1025792&r2=1025793&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
 Wed Oct 20 23:46:20 2010
@@ -1,16 +1,17 @@
-// Copyright 2007, 2008, 2009, 2010 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
+/* Copyright 2007, 2008, 2009, 2010 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http:*www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 
 var Tapestry = {
 
@@ -745,100 +746,115 @@ Element.addMethods( {
        }
 });
 
-Element.addMethods('FORM', {
-       /**
-        * Gets or creates the Tapestry.FormEventManager for the form.
-        * 
-        * @param form
-        *            form element
-        */
-       getFormEventManager : function(form) {
-               form = $(form);
-               var t = $T(form);
+Element
+               .addMethods(
+                               'FORM',
+                               {
+                                       /**
+                                        * Gets the Tapestry.FormEventManager 
for the form.
+                                        * 
+                                        * @param form
+                                        *            form element
+                                        */
+                                       getFormEventManager : function(form) {
+                                               form = $(form);
 
-               var manager = t.formEventManager;
+                                               var manager = 
$T(form).formEventManager;
 
-               if (manager == undefined) {
-                       manager = new Tapestry.FormEventManager(form);
-                       t.formEventManager = manager;
-               }
+                                               if (manager == undefined) {
 
-               return manager;
-       },
+                                                       throw "No 
Tapestry.FormEventManager object has been created for form '#{id}'."
+                                                                       
.interpolate(form);
+                                               }
 
-       /**
-        * Identifies in the form what is the cause of the submission. The 
element's
-        * id is stored into the t:submit hidden field (created as needed).
-        * 
-        * @param form
-        *            to update
-        * @param element
-        *            id or element that is the cause of the submit (a Submit or
-        *            LinkSubmit)
-        */
-       setSubmittingElement : function(form, element) {
-               form.getFormEventManager().setSubmittingElement(element);
-       },
-
-       /** Turns off client validation for the next submission of the form. */
-       skipValidation : function(form) {
-               $T(form).skipValidation = true;
-       },
-
-       /**
-        * Programmatically perform a submit, invling the onsubmit event 
handler (if
-        * present) before calling form.submit().
-        */
-       performSubmit : function(form, event) {
-               if (form.onsubmit == undefined
-                               || form.onsubmit.call(window.document, event)) {
-                       form.submit();
-               }
-       },
+                                               return manager;
+                                       },
 
-       /**
-        * Sends an Ajax request to the Form's action. This encapsulates a few
-        * things, such as a default onFailure handler, and working around
-        * bugs/features in Prototype concerning how submit buttons are 
processed.
-        * 
-        * @param form
-        *            used to define the data to be sent in the request
-        * @param options
-        *            standard Prototype Ajax Options
-        * @return Ajax.Request the Ajax.Request created for the request
-        */
-       sendAjaxRequest : function(form, url, options) {
-               form = $(form);
+                                       /**
+                                        * Identifies in the form what is the 
cause of the
+                                        * submission. The element's id is 
stored into the t:submit
+                                        * hidden field (created as needed).
+                                        * 
+                                        * @param form
+                                        *            to update
+                                        * @param element
+                                        *            id or element that is the 
cause of the submit
+                                        *            (a Submit or LinkSubmit)
+                                        */
+                                       setSubmittingElement : function(form, 
element) {
+                                               form.getFormEventManager()
+                                                               
.setSubmittingElement(element);
+                                       },
 
-               /*
-                * Generally, options should not be null or missing, because 
otherwise
-                * there's no way to provide any callbacks!
-                */
-               options = Object.clone(options || {});
+                                       /**
+                                        * Turns off client validation for the 
next submission of
+                                        * the form.
+                                        */
+                                       skipValidation : function(form) {
+                                               $T(form).skipValidation = true;
+                                       },
 
-               /*
-                * Find the elements, skipping over any submit buttons. This 
works
-                * around bugs in Prototype 1.6.0.2.
-                */
-               var elements = form.getElements().reject(function(e) {
-                       return e.tagName == "INPUT" && e.type == "submit";
-               });
+                                       /**
+                                        * Programmatically perform a submit, 
invoking the onsubmit
+                                        * event handler (if present) before 
calling form.submit().
+                                        */
+                                       performSubmit : function(form, event) {
+                                               if (form.onsubmit == undefined
+                                                               || 
form.onsubmit.call(window.document, event)) {
+                                                       form.submit();
+                                               }
+                                       },
 
-               var hash = Form.serializeElements(elements, true);
+                                       /**
+                                        * Sends an Ajax request to the Form's 
action. This
+                                        * encapsulates a few things, such as a 
default onFailure
+                                        * handler, and working around 
bugs/features in Prototype
+                                        * concerning how submit buttons are 
processed.
+                                        * 
+                                        * @param form
+                                        *            used to define the data 
to be sent in the
+                                        *            request
+                                        * @param options
+                                        *            standard Prototype Ajax 
Options
+                                        * @return Ajax.Request the 
Ajax.Request created for the
+                                        *         request
+                                        */
+                                       sendAjaxRequest : function(form, url, 
options) {
+                                               form = $(form);
 
-               /*
-                * Copy the parameters in, overwriting field values, because 
Prototype
-                * 1.6.0.2 does not.
-                */
-               Object.extend(hash, options.parameters);
+                                               /*
+                                                * Generally, options should 
not be null or missing,
+                                                * because otherwise there's no 
way to provide any
+                                                * callbacks!
+                                                */
+                                               options = Object.clone(options 
|| {});
+
+                                               /*
+                                                * Find the elements, skipping 
over any submit buttons.
+                                                * This works around bugs in 
Prototype 1.6.0.2.
+                                                */
+                                               var elements = 
form.getElements().reject(function(e) {
+                                                       return e.tagName == 
"INPUT" && e.type == "submit";
+                                               });
 
-               options.parameters = hash;
+                                               var hash = 
Form.serializeElements(elements, true);
 
-               /* Ajax.Request will convert the hash into a query string and 
post it. */
+                                               /*
+                                                * Copy the parameters in, 
overwriting field values,
+                                                * because Prototype 1.6.0.2 
does not.
+                                                */
+                                               Object.extend(hash, 
options.parameters);
+
+                                               options.parameters = hash;
+
+                                               /*
+                                                * Ajax.Request will convert 
the hash into a query
+                                                * string and post it.
+                                                */
 
-               return Tapestry.ajaxRequest(url, options);
-       }
-});
+                                               return 
Tapestry.ajaxRequest(url, options);
+                                       }
+                               });
 
 Element.addMethods( [ 'INPUT', 'SELECT', 'TEXTAREA' ], {
        /**
@@ -1055,7 +1071,6 @@ Tapestry.Initializer = {
                if (element.tagName == "FORM") {
 
                        // Create the FEM if necessary.
-                       element.getFormEventManager();
                        element.addClassName(Tapestry.PREVENT_SUBMISSION);
 
                        /*
@@ -1114,6 +1129,18 @@ Tapestry.Initializer = {
        },
 
        /**
+        * Sets up a Tapestry.FormEventManager for the form, and enables events 
for
+        * validations. This is executed with InitializationPriority.EARLY, to
+        * ensure that the FormEventManager exists vefore any validations are 
added
+        * for fields within the Form.
+        * 
+        * @since 5.2.2
+        */
+       formEventManager : function(spec) {
+               $T(spec.formId).formEventManager = new 
Tapestry.FormEventManager(spec);
+       },
+
+       /**
         * Keys in the masterSpec are ids of field control elements. Value is a 
list
         * of validation specs. Each validation spec is a 2 or 3 element array.
         */
@@ -1125,11 +1152,9 @@ Tapestry.Initializer = {
                                                        var field = $(pair.key);
 
                                                        /*
-                                                        * Force the creation 
of the form and field event
-                                                        * managers.
+                                                        * Force the creation 
of the field event manager.
                                                         */
 
-                                                       
$(field.form).getFormEventManager();
                                                        
$(field).getFieldEventManager();
 
                                                        $A(pair.value)
@@ -1203,8 +1228,6 @@ Tapestry.Initializer = {
                var hidden = $(spec.element + "-hidden");
                var form = $(hidden.form);
 
-               form.getFormEventManager();
-
                function runAnimation(makeVisible) {
                        var effect = makeVisible ? 
Tapestry.ElementEffect[spec.show]
                                        || Tapestry.ElementEffect.slidedown
@@ -1499,8 +1522,10 @@ Tapestry.ErrorPopup = Class.create( {
 
 Tapestry.FormEventManager = Class.create( {
 
-       initialize : function(form) {
-               this.form = $(form);
+       initialize : function(spec) {
+               this.form = $(spec.formId);
+               this.validateOnBlur = spec.validate.blur;
+               this.validateOnSubmit = spec.validate.submit;
 
                this.form.onsubmit = 
this.handleSubmit.bindAsEventListener(this);
        },
@@ -1629,20 +1654,27 @@ Tapestry.FieldEventManager = Class.creat
 
                this.translator = Prototype.K;
 
-               document.observe(Tapestry.FOCUS_CHANGE_EVENT, function(event) {
-                       /*
-                        * If changing focus *within the same form* then 
perform validation.
-                        * Note that Tapestry.currentFocusField does not change 
until after
-                        * the FOCUS_CHANGE_EVENT notification.
-                        */
-                       if (Tapestry.currentFocusField == this.field
-                                       && this.field.form == event.memo.form)
-                               this.validateInput();
+               var fem = $(this.field.form).getFormEventManager();
 
-               }.bindAsEventListener(this));
+               if (fem.validateOnBlur) {
+
+                       document.observe(Tapestry.FOCUS_CHANGE_EVENT, 
function(event) {
+                               /*
+                                * If changing focus *within the same form* 
then perform
+                                * validation. Note that 
Tapestry.currentFocusField does not
+                                * change until after the FOCUS_CHANGE_EVENT 
notification.
+                                */
+                               if (Tapestry.currentFocusField == this.field
+                                               && this.field.form == 
event.memo.form)
+                                       this.validateInput();
+
+                       }.bindAsEventListener(this));
+               }
 
-               $(this.field.form).observe(Tapestry.FORM_VALIDATE_FIELDS_EVENT,
-                               this.validateInput.bindAsEventListener(this));
+               if (fem.validateOnSubmit) {
+                       
$(this.field.form).observe(Tapestry.FORM_VALIDATE_FIELDS_EVENT,
+                                       
this.validateInput.bindAsEventListener(this));
+               }
        },
 
        /**

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditRemoveReorder.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditRemoveReorder.java?rev=1025793&r1=1025792&r2=1025793&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditRemoveReorder.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditRemoveReorder.java
 Wed Oct 20 23:46:20 2010
@@ -1,10 +1,10 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,13 +14,15 @@
 
 package org.apache.tapestry5.integration.app1.pages;
 
+import org.apache.tapestry5.corelib.ClientValidation;
+
 public class BeanEditRemoveReorder extends BeanEditorDemo
 {
 
     @Override
-    public boolean getClientValidation()
+    public ClientValidation getClientValidation()
     {
-        return true;
+        return ClientValidation.BLUR;
     }
 
     @Override

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditorDemo.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditorDemo.java?rev=1025793&r1=1025792&r2=1025793&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditorDemo.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BeanEditorDemo.java
 Wed Oct 20 23:46:20 2010
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@ import org.apache.tapestry5.annotations.
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.beaneditor.Validate;
+import org.apache.tapestry5.corelib.ClientValidation;
 import org.apache.tapestry5.corelib.components.BeanEditForm;
 import org.apache.tapestry5.integration.app1.data.RegistrationData;
 
@@ -29,7 +30,7 @@ public class BeanEditorDemo
     private String message;
 
     @Component(id = "registrationData", parameters =
-    { "clientValidation=clientValidation" })
+    { "clientValidation=prop:clientValidation" })
     private BeanEditForm form;
 
     @ApplicationState
@@ -51,9 +52,9 @@ public class BeanEditorDemo
         form.clearErrors();
     }
 
-    public boolean getClientValidation()
+    public ClientValidation getClientValidation()
     {
-        return false;
+        return ClientValidation.NONE;
     }
 
     public String getPageTitle()

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ValidBeanEditorDemo.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ValidBeanEditorDemo.java?rev=1025793&r1=1025792&r2=1025793&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ValidBeanEditorDemo.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ValidBeanEditorDemo.java
 Wed Oct 20 23:46:20 2010
@@ -14,13 +14,15 @@
 
 package org.apache.tapestry5.integration.app1.pages;
 
+import org.apache.tapestry5.corelib.ClientValidation;
+
 public class ValidBeanEditorDemo extends BeanEditorDemo
 {
 
     @Override
-    public boolean getClientValidation()
+    public ClientValidation getClientValidation()
     {
-        return true;
+        return ClientValidation.BLUR;
     }
 
     @Override
@@ -32,9 +34,9 @@ public class ValidBeanEditorDemo extends
     Object onCanceledFromRegistrationData()
     {
         setMessage("Form was cancelled.");
-        
+
         clearErrors();
-        
+
         return this;
     }
 }


Reply via email to