Author: kmenard
Date: Tue Feb 17 12:25:16 2009
New Revision: 744998

URL: http://svn.apache.org/viewvc?rev=744998&view=rev
Log:
Fixed TAP5-166: Add validator support to RadioGroup

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RadioDemo.tml
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java?rev=744998&r1=744997&r2=744998&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
 Tue Feb 17 12:25:16 2009
@@ -62,6 +62,14 @@
     @Parameter(required = true, allowNull = false)
     private ValueEncoder encoder;
 
+    /**
+     * The object that will perform input validation. The validate binding 
prefix is
+     * generally used to provide this object in a declarative fashion.
+     */
+    @Parameter(defaultPrefix = BindingConstants.VALIDATE)
+    @SuppressWarnings("unchecked")
+    private FieldValidator<Object> validate;
+
     @Inject
     private ComponentDefaultProvider defaultProvider;
 
@@ -80,6 +88,9 @@
     @Environmental
     private ValidationTracker tracker;
 
+    @Inject
+    private FieldValidationSupport fieldValidationSupport;
+
     private String controlName;
 
     String defaultLabel()
@@ -138,11 +149,20 @@
 
     private void processSubmission()
     {
-        String clientValue = request.getParameter(controlName);
+        String rawValue = request.getParameter(controlName);
 
-        tracker.recordInput(this, clientValue);
+        tracker.recordInput(this, rawValue);
+        try
+        {
+            if (validate != null)
+                fieldValidationSupport.validate(rawValue, resources, validate);
+        }
+        catch (ValidationException ex)
+        {
+            tracker.recordError(this, ex.getMessage());
+        }
 
-        value = encoder.toValue(clientValue);
+        value = encoder.toValue(rawValue);
     }
 
     /**
@@ -222,11 +242,8 @@
         return null;
     }
 
-    /**
-     * Returns false; RadioGroup does not support declarative validation.
-     */
     public boolean isRequired()
     {
-        return false;
+        return validate.isRequired();
     }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RadioDemo.tml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RadioDemo.tml?rev=744998&r1=744997&r2=744998&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RadioDemo.tml 
(original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RadioDemo.tml Tue Feb 
17 12:25:16 2009
@@ -6,7 +6,9 @@
   <p>Choose a department and position:</p>
 
   <t:form>
-    <t:radiogroup t:id="department">
+    <t:errors/>
+
+    <t:radiogroup t:id="department" t:validate="required">
       <t:loop source="departments" value="loopValue">
         <p>
           <t:radio t:id="radio" value="loopValue" label="prop:label" />

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java?rev=744998&r1=744997&r2=744998&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
 Tue Feb 17 12:25:16 2009
@@ -1107,6 +1107,18 @@
     }
 
     @Test
+    public void radio_group_validator()
+    {
+        start("RadioDemo");
+
+        String update = SUBMIT;
+
+        // Verify that the "required" validator works.
+        clickAndWait(update);
+        assertTextPresent("You must provide a value for Department.");
+    }
+
+    @Test
     public void regexp_validator()
     {
         start("Regexp Demo");


Reply via email to