TAP5-1981: convert client-side values back to server-side values for validation
diff --git a/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java b/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
index 85d4d00..bfd9999 100644
--- a/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
+++ b/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
@@ -281,5 +281,24 @@
                 getText(String.format(locatorTemplate, "minValue")));
 
     }
+    
+    //TAP5-1981
+    @Test
+    public void validate_with_radiogroup() throws Exception
+    {
+        openLinks("Radio Group with Validation");
+        
+        click("//div[@class='test1']/form/input[@value='3']");
+
+        clickAndWait("//div[@class='test1']/form/input[@type='submit']");
+
+        assertTextPresent("Radiogroup requires a value no larger than 2.");
+
+        click("//div[@class='test2']/form/input[@value='3']");
+
+        clickAndWait("//div[@class='test2']/form/div/div/input[@type='submit']");
+
+        assertTextPresent("Group2 must be less than or equal to 2");
+    }
 
 }
\ No newline at end of file
diff --git a/tapestry-beanvalidator/src/test/java/org/example/testapp/entities/BeanForTAP1981.java b/tapestry-beanvalidator/src/test/java/org/example/testapp/entities/BeanForTAP1981.java
new file mode 100644
index 0000000..7274604
--- /dev/null
+++ b/tapestry-beanvalidator/src/test/java/org/example/testapp/entities/BeanForTAP1981.java
@@ -0,0 +1,18 @@
+package org.example.testapp.entities;
+
+import javax.validation.constraints.Max;
+
+public class BeanForTAP1981 {
+
+  private int number;
+
+  @Max(2)
+  public int getNumber() {
+    return number;
+  }
+
+  public void setNumber(final int value) {
+    number = value;
+  }
+
+}
diff --git a/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/RadioGroupWithValidation.java b/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/RadioGroupWithValidation.java
new file mode 100644
index 0000000..8531029
--- /dev/null
+++ b/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/RadioGroupWithValidation.java
@@ -0,0 +1,35 @@
+package org.example.testapp.pages;
+
+import org.apache.tapestry5.FieldValidator;
+import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.annotations.Environmental;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.corelib.components.RadioGroup;
+import org.apache.tapestry5.services.PropertyEditContext;
+import org.example.testapp.entities.BeanForTAP1981;
+
+public class RadioGroupWithValidation {
+
+  @Component(parameters = { "value=bean.number", "validate=prop:beanValidator" })
+  private RadioGroup group2;
+
+  /* */
+  @Persist
+  private BeanForTAP1981 bean;
+
+  /* */
+  @Environmental
+  private PropertyEditContext context;
+
+  public BeanForTAP1981 getBean() {
+    if (bean == null) {
+      bean = new BeanForTAP1981();
+    }
+    return bean;
+  }
+
+  public FieldValidator getBeanValidator() {
+    return context.getValidator(group2);
+  }
+
+}
diff --git a/tapestry-beanvalidator/src/test/webapp/Index.tml b/tapestry-beanvalidator/src/test/webapp/Index.tml
index abc9dfa..e19eafb 100644
--- a/tapestry-beanvalidator/src/test/webapp/Index.tml
+++ b/tapestry-beanvalidator/src/test/webapp/Index.tml
@@ -32,6 +32,9 @@
             </li>            
             <li>
                 <t:pagelink page="NestedObjectDemo" t:context="true">NestedObject Demo (client validation enabled)</t:pagelink>
+            </li>
+            <li>
+            	<t:pagelink page="RadioGroupWithValidation">Radio Group with Validation</t:pagelink>
             </li>            
         </ul>
     </body>
diff --git a/tapestry-beanvalidator/src/test/webapp/RadioGroupWithValidation.tml b/tapestry-beanvalidator/src/test/webapp/RadioGroupWithValidation.tml
new file mode 100644
index 0000000..f1123a1
--- /dev/null
+++ b/tapestry-beanvalidator/src/test/webapp/RadioGroupWithValidation.tml
@@ -0,0 +1,32 @@
+<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
+      xmlns:p="tapestry:parameter">
+    <body>
+     	<div class="test1">
+	     	<h1>test 1</h1>
+	        <t:form>
+	
+				<t:errors/>
+	            <t:RadioGroup value="bean.number" validate="max=2">
+	                <t:radio value="1"/>1<br/>
+	                <t:radio value="2"/>2<br/>
+					<t:radio value="3"/>3<br/>
+				</t:RadioGroup>
+	
+				<t:submit/>
+	        </t:form>
+		</div>
+     	<div class="test2">
+		
+			<h1>test 2</h1>
+			<t:BeanEditForm object="bean">
+				<p:number>
+					<t:comp t:id="group2">
+						<t:radio value="1"/>1<br/>
+						<t:radio value="2"/>2<br/>
+						<t:radio value="3"/>3<br/>
+					</t:comp>
+				</p:number>
+			</t:BeanEditForm>
+		</div>
+    </body>
+</html>
\ No newline at end of file
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
index cd594c1..053f056 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
@@ -170,19 +170,20 @@
             return;
         }
         String rawValue = request.getParameter(controlName);
+        Object convertedValue = encoder.toValue(rawValue);
 
         tracker.recordInput(this, rawValue);
         try
         {
             if (validate != null)
-                fieldValidationSupport.validate(rawValue, resources, validate);
+                fieldValidationSupport.validate(convertedValue, resources, validate);
         }
         catch (ValidationException ex)
         {
             tracker.recordError(this, ex.getMessage());
         }
 
-        value = encoder.toValue(rawValue);
+        value = convertedValue;
     }
 
     /**