diff --git a/core/src/main/java/org/apache/struts2/components/Form.java b/core/src/main/java/org/apache/struts2/components/Form.java index aec4e4abe..ad8250d8a 100644 --- a/core/src/main/java/org/apache/struts2/components/Form.java +++ b/core/src/main/java/org/apache/struts2/components/Form.java @@ -31,16 +31,22 @@ import com.opensymphony.xwork2.interceptor.MethodFilterInterceptorUtil; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ActionValidatorManager; import com.opensymphony.xwork2.validator.FieldValidator; +import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.ValidationInterceptor; import com.opensymphony.xwork2.validator.Validator; -import org.apache.struts2.StrutsConstants; +import com.opensymphony.xwork2.validator.ValidatorContext; +import com.opensymphony.xwork2.validator.validators.VisitorFieldValidator; +import org.apache.commons.lang3.StringUtils; +import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.views.annotations.StrutsTag; import org.apache.struts2.views.annotations.StrutsTagAttribute; -import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.*; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Set; /** @@ -116,14 +122,17 @@ public class Form extends ClosingUIBean { super(stack, request, response); } + @Override protected boolean evaluateNameValue() { return false; } + @Override public String getDefaultOpenTemplate() { return OPEN_TEMPLATE; } + @Override protected String getDefaultTemplate() { return TEMPLATE; } @@ -153,6 +162,7 @@ public class Form extends ClosingUIBean { * Revised for Portlet actionURL as form action, and add wwAction as hidden * field. Refer to template.simple/form.vm */ + @Override protected void evaluateExtraParams() { super.evaluateExtraParams(); if (validate != null) { @@ -210,6 +220,7 @@ public class Form extends ClosingUIBean { *
Form component.
* It is used by Form component's child that might need a
diff --git a/core/src/main/resources/template/xhtml/form-close-validate.ftl b/core/src/main/resources/template/xhtml/form-close-validate.ftl
index fcf416b1a..81a17e1e1 100644
--- a/core/src/main/resources/template/xhtml/form-close-validate.ftl
+++ b/core/src/main/resources/template/xhtml/form-close-validate.ftl
@@ -36,6 +36,26 @@ END SNIPPET: supported-validators
<#if ((parameters.validate!false == true) && (parameters.performValidation!false == true))>
-#if>
+#if>
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/struts2/components/FormTest.java b/core/src/test/java/org/apache/struts2/components/FormTest.java
index f58829135..f1611f2a9 100644
--- a/core/src/test/java/org/apache/struts2/components/FormTest.java
+++ b/core/src/test/java/org/apache/struts2/components/FormTest.java
@@ -21,18 +21,17 @@
package org.apache.struts2.components;
-import java.util.List;
-
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.ActionProxy;
+import com.opensymphony.xwork2.config.entities.ActionConfig;
+import com.opensymphony.xwork2.validator.validators.RequiredFieldValidator;
import org.apache.struts2.TestAction;
import org.apache.struts2.views.jsp.AbstractUITagTest;
import org.easymock.EasyMock;
-import com.opensymphony.xwork2.validator.validators.RequiredFieldValidator;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionContext;
+import java.util.List;
/**
* FormTest
@@ -45,6 +44,7 @@ public class FormTest extends AbstractUITagTest {
Form form = new Form(stack, request, response);
container.inject(form);
form.getParameters().put("actionClass", TestAction.class);
+ form.setAction("actionName");
List v = form.getValidators("foo");
assertEquals(1, v.size());
assertEquals(RequiredFieldValidator.class, v.get(0).getClass());
diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt
index b31d320d8..1a4678cf8 100644
--- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt
+++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-2.txt
@@ -32,12 +32,32 @@
diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-22.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-22.txt
index bb6bbaa43..ee76c3a4c 100644
--- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-22.txt
+++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-22.txt
@@ -33,23 +33,41 @@
-
+ //fieldname:myUpDownSelectTag
+ //validatorname:int
+ if(form.elements['myUpDownSelectTag']) {
+ field = form.elements['myUpDownSelectTag'];
+ var error = "bar must be between 6000 and 10000.";
+ var fieldValue = getFieldValue(field);
+ if(continueValidation && fieldValue != null) {
+ if(parseInt(fieldValue) < 6000 || parseInt(fieldValue) > 10000) {
+ addError(field, error);
+ errors = true;
+ }
+ }
+ }
+ return !errors;
+ }
+
\ No newline at end of file
diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-24.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-24.txt
index 5c47bd28f..7888a5302 100644
--- a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-24.txt
+++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-24.txt
@@ -33,24 +33,43 @@
+ //fieldname:myUpDownSelectTag
+ //validatorname:double
+ if(form.elements['myUpDownSelectTag']) {
+ field = form.elements['myUpDownSelectTag'];
+ var error = "bar must be between 6000.1 and 10000.1.";
+ var fieldValue = getFieldValue(field);
+ if(continueValidation && fieldValue != null) {
+ var value = parseFloat(fieldValue);
+ if(value < 6000.1 || value > 10000.1 || false || false) {
+ addError(field, error);
+ errors = true;
+ }
+ }
+ }
+ return !errors;
+ }
+