rleland 2002/10/17 18:35:02
Modified: conf/share validator-rules.xml
src/share/org/apache/struts/taglib/html
JavascriptValidatorTag.java
src/share/org/apache/struts/util StrutsValidator.java
StrutsValidatorUtil.java
src/share/org/apache/struts/validator
DynaValidatorActionForm.java DynaValidatorForm.java
ValidatorActionForm.java ValidatorForm.java
Log:
Duplicate & rename Validator classes in util to validator package.
StrutsValidator -> ValidatorChecks
StrutsValidatorUtils->Resources
Make depreciated classes depend on renamed classes.
Modify JavDoc to document this change.
Revision Changes Path
1.11 +18 -18 jakarta-struts/conf/share/validator-rules.xml
Index: validator-rules.xml
===================================================================
RCS file: /home/cvs/jakarta-struts/conf/share/validator-rules.xml,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- validator-rules.xml 16 Oct 2002 18:44:30 -0000 1.10
+++ validator-rules.xml 18 Oct 2002 01:35:02 -0000 1.11
@@ -41,7 +41,7 @@
<global>
<validator name="required"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -82,7 +82,7 @@
</validator>
<validator name="requiredif"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateRequiredIf"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -94,7 +94,7 @@
</validator>
<validator name="minlength"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateMinLength"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -136,7 +136,7 @@
<validator name="maxlength"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateMaxLength"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -178,7 +178,7 @@
<validator name="mask"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateMask"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -229,7 +229,7 @@
<validator name="byte"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateByte"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -274,7 +274,7 @@
<validator name="short"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateShort"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -320,7 +320,7 @@
<validator name="integer"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateInteger"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -366,7 +366,7 @@
<validator name="long"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateLong"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -378,7 +378,7 @@
<validator name="float"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateFloat"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -424,7 +424,7 @@
<validator name="double"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateDouble"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -436,7 +436,7 @@
<validator name="date"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateDate"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -599,7 +599,7 @@
<!-- range is deprecated use rangeInt instead -->
<validator name="range"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateIntRange"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -610,7 +610,7 @@
msg="errors.range">
<javascript><![CDATA[
- function validateRange(form) {
+ function validateRange(form) {
return validIntRange(form);
}]]>
</javascript>
@@ -618,7 +618,7 @@
</validator>
<validator name="intRange"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateIntRange"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -662,7 +662,7 @@
</validator>
<validator name="floatRange"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateFloatRange"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -706,7 +706,7 @@
</validator>
<validator name="creditCard"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateCreditCard"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
@@ -784,7 +784,7 @@
<validator name="email"
- classname="org.apache.struts.util.StrutsValidator"
+ classname="org.apache.struts.validator.ValidatorChecks"
method="validateEmail"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
1.7 +5 -6
jakarta-struts/src/share/org/apache/struts/taglib/html/JavascriptValidatorTag.java
Index: JavascriptValidatorTag.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/JavascriptValidatorTag.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JavascriptValidatorTag.java 16 Oct 2002 20:55:07 -0000 1.6
+++ JavascriptValidatorTag.java 18 Oct 2002 01:35:02 -0000 1.7
@@ -78,7 +78,7 @@
import org.apache.struts.action.Action;
import org.apache.struts.validator.ValidatorPlugIn;
import org.apache.struts.util.MessageResources;
-import org.apache.struts.util.StrutsValidatorUtil;
+import org.apache.struts.validator.Resources;
import org.apache.struts.util.RequestUtils;
import org.apache.struts.config.ApplicationConfig;
@@ -357,7 +357,7 @@
// Skip indexed fields for now until there is
// a good way to handle error messages (and the length of the
list (could retrieve from scope?))
if (!field.isIndexed() && field.getPage() == page &&
field.isDependency(va.getName())) {
- String message = StrutsValidatorUtil.getMessage(messages,
locale, va, field);
+ String message = Resources.getMessage(messages, locale, va,
field);
message = (message != null ? message : "");
jscriptVar = getNextVar(jscriptVar);
@@ -393,16 +393,15 @@
}
results.append(" } \n\n");
}
- } else {
- results.append("<script language=\"Javascript1.1\">");
}
if ("true".equals(staticJavascript)) {
results.append(getJavascriptStaticMethods(resources));
}
- results.append(getJavascriptEnd());
-
+ if ("true".equals(dynamicJavascript)) {
+ results.append(getJavascriptEnd());
+ }
// Print this field to our output writer
JspWriter writer = pageContext.getOut();
1.12 +31 -514
jakarta-struts/src/share/org/apache/struts/util/StrutsValidator.java
Index: StrutsValidator.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/StrutsValidator.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- StrutsValidator.java 16 Oct 2002 18:44:30 -0000 1.11
+++ StrutsValidator.java 18 Oct 2002 01:35:02 -0000 1.12
@@ -56,17 +56,11 @@
import java.io.Serializable;
import java.util.Date;
-import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+
import org.apache.commons.validator.Field;
-import org.apache.commons.validator.GenericTypeValidator;
-import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.ValidatorAction;
-import org.apache.commons.validator.ValidatorUtil;
-import org.apache.commons.validator.Validator;
import org.apache.struts.action.ActionErrors;
/**
@@ -78,10 +72,11 @@
* In general passin in a null or blank will return a null Object or a false
* boolean. However, nulls and blanks do not result in an error being added to the
* errors.
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks }
*
*@author David Winterfeldt
*@author James Turner
- *@author Rob Leland
+
*@since Struts 1.1
*/
public class StrutsValidator implements Serializable {
@@ -89,8 +84,6 @@
/**
* Commons Logging instance.
*/
- private static Log LOG = LogFactory.getLog(StrutsValidator.class);
-
public final static String FIELD_TEST_NULL = "NULL";
public final static String FIELD_TEST_NOTNULL = "NOTNULL";
public final static String FIELD_TEST_EQUAL = "EQUAL";
@@ -101,6 +94,7 @@
*
* Checks if the field isn't null and length of the field is greater than zero
* not including whitespace.</p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateRequired(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
@@ -116,119 +110,17 @@
ActionErrors errors,
HttpServletRequest request) {
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
- if (GenericValidator.isBlankOrNull(value)) {
- errors.add(field.getKey(),
- StrutsValidatorUtil.getActionError(request, va,
field));
-
- return false;
- } else {
- return true;
- }
-
+ return
org.apache.struts.validator.ValidatorChecks.validateRequired(bean,va,field,errors,request);
}
- /**
- * <p>
- *
- * Checks if the field isn't null based on the values of other fields
- * </p>
- *
- *@param bean The bean validation is being performed on.
- *@param va The <code>ValidatorAction</code> that is currently being
performed.
- *@param field The <code>Field</code> object associated with the current
- * field being validated.
- *@param errors The <code>ActionErrors</code> object to add errors to if any
- * validation errors occur.
- *@param validator The <code>Validator</code> instance, used to access other
field values.
- *@param request Current request object.
- *@return True if meets stated requirements, False otherwise
- */
- public static boolean validateRequiredIf(Object bean,
- ValidatorAction va, Field field,
- ActionErrors errors,
- Validator validator,
- HttpServletRequest request) {
- Object form = validator.getResource(Validator.BEAN_KEY);
- String value = null;
- boolean required = false;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
- int i = 0;
- String fieldJoin = "AND";
- if (!GenericValidator.isBlankOrNull(field.getVarValue("field-join"))) {
- fieldJoin = field.getVarValue("field-join");
- }
- if (fieldJoin.equalsIgnoreCase("AND")) {
- required = true;
- }
- while (!GenericValidator.isBlankOrNull(field.getVarValue("field[" + i +
"]"))) {
- String dependProp = field.getVarValue("field[" + i + "]");
- String dependTest = field.getVarValue("field-test[" + i + "]");
- String dependTestValue = field.getVarValue("field-value[" + i + "]");
- String dependIndexed = field.getVarValue("field-indexed[" + i + "]");
- if (dependIndexed == null)
- dependIndexed = "false";
- String dependVal = null;
- boolean this_required = false;
- if (field.isIndexed() && dependIndexed.equalsIgnoreCase("true")) {
- String key = field.getKey();
- if ((key.indexOf("[") > -1) &&
- (key.indexOf("]") > -1)) {
- String ind = key.substring(0, key.indexOf(".") + 1);
- dependProp = ind + dependProp;
- }
- }
- dependVal = ValidatorUtil.getValueAsString(form, dependProp);
- if (dependTest.equals(FIELD_TEST_NULL)) {
- if ((dependVal != null) && (dependVal.length() > 0)) {
- this_required = false;
- } else {
- this_required = true;
- }
- }
- if (dependTest.equals(FIELD_TEST_NOTNULL)) {
- if ((dependVal != null) && (dependVal.length() > 0)) {
- this_required = true;
- } else {
- this_required = false;
- }
- }
- if (dependTest.equals(FIELD_TEST_EQUAL)) {
- this_required = dependTestValue.equalsIgnoreCase(dependVal);
- }
- if (fieldJoin.equalsIgnoreCase("AND")) {
- required = required && this_required;
- } else {
- required = required || this_required;
- }
- i++;
- }
- if (required) {
- if ((value != null) && (value.length() > 0)) {
- return true;
- } else {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- return false;
- }
- }
- return true;
- }
/**
* <p>
*
* Checks if the field matches the regular expression in the field's mask
attribute.
* </p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateMask(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
@@ -244,29 +136,7 @@
ActionErrors errors,
HttpServletRequest request) {
- String mask = field.getVarValue("mask");
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean,
- field.getProperty());
- }
- try {
- if (!GenericValidator.isBlankOrNull(value) &&
- !GenericValidator.matchRegexp(value, mask)) {
- errors.add(field.getKey(),
- StrutsValidatorUtil.getActionError(request, va,
- field));
-
- return false;
- } else {
- return true;
- }
- } catch (Exception e) {
- LOG.error(e.getMessage(), e);
- }
- return true;
+ return
org.apache.struts.validator.ValidatorChecks.validateMask(bean,va,field,errors,request);
}
@@ -274,6 +144,7 @@
* <p>
*
* Checks if the field can safely be converted to a byte primitive.</p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateByte(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
@@ -289,23 +160,7 @@
ActionErrors errors,
HttpServletRequest request) {
- Byte result = null;
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
-
- if (!GenericValidator.isBlankOrNull(value)) {
- result = GenericTypeValidator.formatByte(value);
-
- if (result == null) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- }
- }
-
- return result;
+ return
org.apache.struts.validator.ValidatorChecks.validateByte(bean,va,field,errors,request);
}
@@ -313,6 +168,7 @@
* <p>
*
* Checks if the field can safely be converted to a short primitive.</p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateShort(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
@@ -327,23 +183,7 @@
ValidatorAction va, Field field,
ActionErrors errors,
HttpServletRequest request) {
- Short result = null;
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
-
- if (!GenericValidator.isBlankOrNull(value)) {
- result = GenericTypeValidator.formatShort(value);
-
- if (result == null) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- }
- }
-
- return result;
+ return
org.apache.struts.validator.ValidatorChecks.validateShort(bean,va,field,errors,request);
}
@@ -351,6 +191,7 @@
* <p>
*
* Checks if the field can safely be converted to an int primitive.</p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateInteger(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
@@ -365,23 +206,7 @@
ValidatorAction va, Field field,
ActionErrors errors,
HttpServletRequest request) {
- Integer result = null;
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
-
- if (!GenericValidator.isBlankOrNull(value)) {
- result = GenericTypeValidator.formatInt(value);
-
- if (result == null) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- }
- }
-
- return result;
+ return
org.apache.struts.validator.ValidatorChecks.validateInteger(bean,va,field,errors,request);
}
@@ -389,6 +214,7 @@
* <p>
*
* Checks if the field can safely be converted to a long primitive.</p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateLong(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
@@ -403,23 +229,7 @@
ValidatorAction va, Field field,
ActionErrors errors,
HttpServletRequest request) {
- Long result = null;
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
-
- if (!GenericValidator.isBlankOrNull(value)) {
- result = GenericTypeValidator.formatLong(value);
-
- if (result == null) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- }
- }
-
- return result;
+ return
org.apache.struts.validator.ValidatorChecks.validateLong(bean,va,field,errors,request);
}
@@ -427,6 +237,7 @@
* <p>
*
* Checks if the field can safely be converted to a float primitive.</p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateFloat(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
@@ -441,23 +252,7 @@
ValidatorAction va, Field field,
ActionErrors errors,
HttpServletRequest request) {
- Float result = null;
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
-
- if (!GenericValidator.isBlankOrNull(value)) {
- result = GenericTypeValidator.formatFloat(value);
-
- if (result == null) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- }
- }
-
- return result;
+ return
org.apache.struts.validator.ValidatorChecks.validateFloat(bean,va,field,errors,request);
}
@@ -465,6 +260,7 @@
* <p>
*
* Checks if the field can safely be converted to a double primitive.</p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateDouble(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
@@ -479,23 +275,7 @@
ValidatorAction va, Field field,
ActionErrors errors,
HttpServletRequest request) {
- Double result = null;
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
-
- if (!GenericValidator.isBlankOrNull(value)) {
- result = GenericTypeValidator.formatDouble(value);
-
- if (result == null) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- }
- }
-
- return result;
+ return
org.apache.struts.validator.ValidatorChecks.validateDouble(bean,va,field,errors,request);
}
@@ -510,6 +290,7 @@
* variable is specified, then the field gets the DateFormat.SHORT format for
* the locale. The setLenient method is set to <code>false</code> for all
variations.
* </p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateDate(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
@@ -525,36 +306,7 @@
ActionErrors errors,
HttpServletRequest request) {
- Date result = null;
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
- String datePattern = field.getVarValue("datePattern");
- String datePatternStrict = field.getVarValue("datePatternStrict");
- Locale locale = StrutsValidatorUtil.getLocale(request);
-
- if (!GenericValidator.isBlankOrNull(value)) {
- try {
- if (datePattern != null && datePattern.length() > 0) {
- result = GenericTypeValidator.formatDate(value, datePattern,
false);
- } else if (datePatternStrict != null && datePatternStrict.length()
> 0) {
- result = GenericTypeValidator.formatDate(value,
datePatternStrict, true);
- } else {
- result = GenericTypeValidator.formatDate(value, locale);
- }
- } catch (Exception e) {
- LOG.error(e.getMessage(), e);
- }
-
- if (result == null) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- }
- }
-
- return result;
+ return
org.apache.struts.validator.ValidatorChecks.validateDate(bean,va,field,errors,request);
}
/**
@@ -562,7 +314,7 @@
*
* Checks if a fields value is within a range (min & max specified in the
* vars attribute).</p>
- *@deprecated As of Struts 1.1b3, replaced by {@link
#validateIntRange(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateIntRange(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
*@param field The <code>Field</code> object associated with the current
@@ -576,154 +328,7 @@
ValidatorAction va, Field field,
ActionErrors errors,
HttpServletRequest request) {
- return validateIntRange(bean, va, field, errors, request);
- }
-
- /**
- * <p>
- *
- * Checks if a fields value is within a range (min & max specified in the
- * vars attribute).</p>
- *
- *@param bean The bean validation is being performed on.
- *@param va The <code>ValidatorAction</code> that is currently being
performed.
- *@param field The <code>Field</code> object associated with the current
- * field being validated.
- *@param errors The <code>ActionErrors</code> object to add errors to if any
- * validation errors occur.
- *@param request Current request object.
- *@return True if in range, false otherwise.
- */
- public static boolean validateIntRange(Object bean,
- ValidatorAction va, Field field,
- ActionErrors errors,
- HttpServletRequest request) {
-
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
- String sMin = field.getVarValue("min");
- String sMax = field.getVarValue("max");
-
- if (!GenericValidator.isBlankOrNull(value)) {
- try {
- int iValue = Integer.parseInt(value);
- int min = Integer.parseInt(sMin);
- int max = Integer.parseInt(sMax);
-
- if (!GenericValidator.isInRange(iValue, min, max)) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
-
- return false;
- }
- } catch (Exception e) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * <p>
- *
- * Checks if a fields value is within a range (min & max specified in the
- * vars attribute).</p>
- *
- *@param bean The bean validation is being performed on.
- *@param va The <code>ValidatorAction</code> that is currently being
performed.
- *@param field The <code>Field</code> object associated with the current
- * field being validated.
- *@param errors The <code>ActionErrors</code> object to add errors to if any
- * validation errors occur.
- *@param request Current request object.
- *@return True if in range, false otherwise.
- */
- public static boolean validateDoubleRange(Object bean,
- ValidatorAction va, Field field,
- ActionErrors errors,
- HttpServletRequest request) {
-
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
- String sMin = field.getVarValue("min");
- String sMax = field.getVarValue("max");
-
- if (!GenericValidator.isBlankOrNull(value)) {
- try {
- double dValue = Double.parseDouble(value);
- double min = Double.parseDouble(sMin);
- double max = Double.parseDouble(sMax);
-
- if (!GenericValidator.isInRange(dValue, min, max)) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
-
- return false;
- }
- } catch (Exception e) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * <p>
- *
- * Checks if a fields value is within a range (min & max specified in the
- * vars attribute).</p>
- *
- *@param bean The bean validation is being performed on.
- *@param va The <code>ValidatorAction</code> that is currently being
performed.
- *@param field The <code>Field</code> object associated with the current
- * field being validated.
- *@param errors The <code>ActionErrors</code> object to add errors to if any
- * validation errors occur.
- *@param request Current request object.
- *@return True if in range, false otherwise.
- */
- public static boolean validateFloatRange(Object bean,
- ValidatorAction va, Field field,
- ActionErrors errors,
- HttpServletRequest request) {
-
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
- String sMin = field.getVarValue("min");
- String sMax = field.getVarValue("max");
-
- if (!GenericValidator.isBlankOrNull(value)) {
- try {
- float fValue = Float.parseFloat(value);
- float min = Float.parseFloat(sMin);
- float max = Float.parseFloat(sMax);
-
- if (!GenericValidator.isInRange(fValue, min, max)) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
-
- return false;
- }
- } catch (Exception e) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- return false;
- }
- }
-
- return true;
+ return org.apache.struts.validator.ValidatorChecks.validateIntRange(bean,
va, field, errors, request);
}
@@ -731,6 +336,7 @@
* <p>
*
* Checks if the field is a valid credit card number.</p> <p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateCreditCard(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
* Translated to Java by Ted Husted (<a
href="mailto:husted@;apache.org">[EMAIL PROTECTED]
* </a>).<br>
@@ -751,23 +357,7 @@
ActionErrors errors,
HttpServletRequest request) {
- Long result = null;
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
-
- if (!GenericValidator.isBlankOrNull(value)) {
- result = GenericTypeValidator.formatCreditCard(value);
-
- if (result == null) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- }
- }
-
- return result;
+ return
org.apache.struts.validator.ValidatorChecks.validateCreditCard(bean,va,field,errors,request);
}
@@ -775,6 +365,7 @@
* <p>
*
* Checks if a field has a valid e-mail address.</p> <p>
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateEmail(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*
* Based on a script by Sandeep V. Tamhankar ([EMAIL PROTECTED]),
http://javascript.internet.com
* </p>
@@ -793,19 +384,7 @@
ActionErrors errors,
HttpServletRequest request) {
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
-
- if (!GenericValidator.isBlankOrNull(value) &&
!GenericValidator.isEmail(value)) {
- errors.add(field.getKey(), StrutsValidatorUtil.getActionError(request,
va, field));
- return false;
- } else {
- return true;
- }
+ return
org.apache.struts.validator.ValidatorChecks.validateEmail(bean,va,field,errors,request);
}
@@ -815,6 +394,7 @@
* Checks if the field's length is less than or equal to the maximum value.
* A <code>Null</code> will be considered an error.</p>
*
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateMaxLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
*@param field The <code>Field</code> object associated with the current
@@ -829,30 +409,7 @@
ActionErrors errors,
HttpServletRequest request) {
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
- String sMaxLength = field.getVarValue("maxlength");
-
- if (value != null) {
- try {
- int max = Integer.parseInt(sMaxLength);
-
- if (!GenericValidator.maxLength(value, max)) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
-
- return false;
- }
- } catch (Exception e) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- return false;
- }
- }
-
- return true;
+ return
org.apache.struts.validator.ValidatorChecks.validateMaxLength(bean,va,field,errors,request);
}
@@ -862,6 +419,7 @@
* Checks if the field's length is greater than or equal to the minimum value.
* A <code>Null</code> will be considered an error.</p>
*
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.ValidatorChecks#validateMinLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)}
*@param bean The bean validation is being performed on.
*@param va The <code>ValidatorAction</code> that is currently being
performed.
*@param field The <code>Field</code> object associated with the current
@@ -876,48 +434,7 @@
ActionErrors errors,
HttpServletRequest request) {
- String value = null;
- if (isString(bean)) {
- value = (String) bean;
- } else {
- value = ValidatorUtil.getValueAsString(bean, field.getProperty());
- }
- String sMinLength = field.getVarValue("minlength");
-
- if (value != null) {
- try {
- int min = Integer.parseInt(sMinLength);
-
- if (!GenericValidator.minLength(value, min)) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
-
- return false;
- }
- } catch (Exception e) {
- errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
- return false;
- }
- }
-
- return true;
- }
-
-
- /**
- * <p>
- *
- * Return <code>true</code> if the specified object is a String or a
<code>null</code>
- * value.</p>
- *
- *@param o Object to be tested
- *@return The string value
- */
- private static boolean isString(Object o) {
-
- if (o == null) {
- return (true);
- }
- return (String.class.isInstance(o));
+ return
org.apache.struts.validator.ValidatorChecks.validateMinLength(bean,va,field,errors,request);
}
}
1.7 +21 -107
jakarta-struts/src/share/org/apache/struts/util/StrutsValidatorUtil.java
Index: StrutsValidatorUtil.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/StrutsValidatorUtil.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- StrutsValidatorUtil.java 14 Oct 2002 16:32:59 -0000 1.6
+++ StrutsValidatorUtil.java 18 Oct 2002 01:35:02 -0000 1.7
@@ -64,24 +64,21 @@
import java.util.Locale;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
-import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.util.MessageResources;
-import org.apache.commons.validator.Arg;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.Validator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorResources;
-import org.apache.struts.validator.ValidatorPlugIn;
-import org.apache.struts.config.ApplicationConfig;
-import org.apache.struts.Globals;
+
/**
* <p>This class helps provides some useful methods for retrieving objects
* from different scopes of the application.</p>
*
+{@link org.apache.struts.validator.Resources}
* @author David Winterfeldt
* @author Eddie Bush
* @version $Revision$ $Date$
@@ -104,8 +101,6 @@
*/
public static String ACTION_ERRORS_KEY = "org.apache.struts.action.ActionErrors";
- private static Locale defaultLocale = Locale.getDefault();
-
/**
* Retrieve <code>ValidatorResources</code> for the module.
*
@@ -114,15 +109,14 @@
* to get the resources for the current application module.
*/
public static ValidatorResources getValidatorResources(ServletContext
application) {
- return
(ValidatorResources)application.getAttribute(ValidatorPlugIn.VALIDATOR_KEY);
+ return
org.apache.struts.validator.Resources.getValidatorResources(application);
}
/**
* Retrieve <code>ValidatorResources</code> for the current module.
*/
public static ValidatorResources getValidatorResources(ServletContext
application,HttpServletRequest request) {
- return (ValidatorResources)
application.getAttribute(ValidatorPlugIn.VALIDATOR_KEY +
-
((ApplicationConfig)request.getAttribute(Globals.APPLICATION_KEY)).getPrefix());
+ return
org.apache.struts.validator.Resources.getValidatorResources(application,request);
}
/**
@@ -133,139 +127,72 @@
* resources for the current application module.
*/
public static MessageResources getMessageResources(ServletContext application) {
- return (MessageResources)application.getAttribute(Action.MESSAGES_KEY);
+ return
org.apache.struts.validator.Resources.getMessageResources(application);
}
/**
* Retrieve <code>MessageResources</code> for the application module.
*/
public static MessageResources getMessageResources(HttpServletRequest request) {
- return (MessageResources)request.getAttribute(Action.MESSAGES_KEY);
+ return org.apache.struts.validator.Resources.getMessageResources(request);
}
/**
* Get the <code>Locale</code> of the current user.
*/
public static Locale getLocale(HttpServletRequest request) {
- Locale locale = null;
- try {
- locale = (Locale) request.getSession().getAttribute(Action.LOCALE_KEY);
- } catch (IllegalStateException e) { // Invalidated session
- locale = null;
- }
- if (locale == null) {
- locale = defaultLocale;
- }
-
- return locale;
+ return org.apache.struts.validator.Resources.getLocale(request);
}
/**
* Gets the <code>Locale</code> sensitive value based on the key passed in.
*/
public static String getMessage(MessageResources messages, Locale locale, String
key) {
- String message = null;
-
- if (messages != null) {
- message = messages.getMessage(locale, key);
- }
- if (message == null) {
- message = "";
- }
-
- return message;
+ return org.apache.struts.validator.Resources.getMessage(messages,locale,key);
}
/**
* Gets the <code>Locale</code> sensitive value based on the key passed in.
*/
public static String getMessage(HttpServletRequest request, String key) {
- MessageResources messages = getMessageResources(request);
-
- return getMessage(messages, getLocale(request), key);
+ return org.apache.struts.validator.Resources.getMessage(request,key);
}
/**
* Gets the locale sensitive message based on the <code>ValidatorAction</code>
message and the
* <code>Field</code>'s arg objects.
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.Resources#getMessage(MessageResources, Locale,
ValidatorAction , Field)}
*/
public static String getMessage(MessageResources messages, Locale locale,
ValidatorAction va, Field field) {
-
- String arg[] = getArgs(va.getName(), messages, locale, field);
- String msg = (field.getMsg(va.getName()) != null ? field.getMsg(va.getName())
: va.getMsg());
-
- return messages.getMessage(locale, msg, arg[0], arg[1], arg[2], arg[3]);
+ return
org.apache.struts.validator.Resources.getMessage(messages,locale,va,field);
}
/**
* Gets the <code>ActionError</code> based on the <code>ValidatorAction</code>
message and the
* <code>Field</code>'s arg objects.
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.Resources#getActionError(HttpServletRequest,
ValidatorAction, Field)}
*/
public static ActionError getActionError(HttpServletRequest request,
ValidatorAction va, Field field) {
- String arg[] = getArgs(va.getName(), getMessageResources(request),
getLocale(request), field);
- String msg = (field.getMsg(va.getName()) != null ? field.getMsg(va.getName())
: va.getMsg());
-
- return new ActionError(msg, arg[0], arg[1], arg[2], arg[3]);
+ return org.apache.struts.validator.Resources.getActionError(request,va,field);
}
/**
* Gets the message arguments based on the current <code>ValidatorAction</code>
* and <code>Field</code>.
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.Resources#getArgs(String,MessageResources,Locale,Field)}
*/
public static String[] getArgs(String actionName, MessageResources messages,
Locale locale, Field field) {
- Arg arg0 = field.getArg0(actionName);
- Arg arg1 = field.getArg1(actionName);
- Arg arg2 = field.getArg2(actionName);
- Arg arg3 = field.getArg3(actionName);
-
- String sArg0 = null;
- String sArg1 = null;
- String sArg2 = null;
- String sArg3 = null;
-
- if (arg0 != null) {
- if (arg0.getResource()) {
- sArg0 = getMessage(messages, locale, arg0.getKey());
- } else {
- sArg0 = arg0.getKey();
- }
- }
-
- if (arg1 != null) {
- if (arg1.getResource()) {
- sArg1 = getMessage(messages, locale, arg1.getKey());
- } else {
- sArg1 = arg1.getKey();
- }
- }
-
- if (arg2 != null) {
- if (arg2.getResource()) {
- sArg2 = getMessage(messages, locale, arg2.getKey());
- } else {
- sArg2 = arg2.getKey();
- }
- }
-
- if (arg3 != null) {
- if (arg3.getResource()) {
- sArg3 = getMessage(messages, locale, arg3.getKey());
- } else {
- sArg3 = arg3.getKey();
- }
- }
-
- return new String[] { sArg0, sArg1, sArg2, sArg3 };
-
+ return
org.apache.struts.validator.Resources.getArgs(actionName,messages,locale,field);
}
/**
* Initialize the <code>Validator</code> to perform validation.
+ *@deprecated As of Struts 1.1b3, replaced by {@link
org.apache.struts.validator.Resources#initValidator(String,Object,ServletContext,HttpServletRequest,ActionErrors,int)}
*
* @param key The key that the validation rules are under
* (the form elements name attribute).
@@ -276,21 +203,8 @@
ServletContext application,
HttpServletRequest request,
ActionErrors errors, int page) {
- ValidatorResources resources =
StrutsValidatorUtil.getValidatorResources(application,request);
- Locale locale = StrutsValidatorUtil.getLocale(request);
-
- Validator validator = new Validator(resources, key);
- validator.setUseContextClassLoader(true);
-
- validator.setPage(page);
-
- validator.addResource(SERVLET_CONTEXT_KEY, application);
- validator.addResource(HTTP_SERVLET_REQUEST_KEY, request);
- validator.addResource(Validator.LOCALE_KEY, locale);
- validator.addResource(ACTION_ERRORS_KEY, errors);
- validator.addResource(Validator.BEAN_KEY, bean);
+ return
org.apache.struts.validator.Resources.initValidator(key,bean,application,request,errors,page);
- return validator;
}
}
1.7 +5 -6
jakarta-struts/src/share/org/apache/struts/validator/DynaValidatorActionForm.java
Index: DynaValidatorActionForm.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/validator/DynaValidatorActionForm.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DynaValidatorActionForm.java 16 Oct 2002 22:41:42 -0000 1.6
+++ DynaValidatorActionForm.java 18 Oct 2002 01:35:02 -0000 1.7
@@ -72,7 +72,6 @@
import org.apache.commons.validator.ValidatorException;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
-import org.apache.struts.util.StrutsValidatorUtil;
/**
@@ -114,7 +113,7 @@
ServletContext application = getServlet().getServletContext();
ActionErrors errors = new ActionErrors();
- Validator validator = StrutsValidatorUtil.initValidator(mapping.getPath(),
+ Validator validator = Resources.initValidator(mapping.getPath(),
this,
application, request,
errors, page);
1.6 +1 -1
jakarta-struts/src/share/org/apache/struts/validator/DynaValidatorForm.java
Index: DynaValidatorForm.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/validator/DynaValidatorForm.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DynaValidatorForm.java 16 Oct 2002 22:41:42 -0000 1.5
+++ DynaValidatorForm.java 18 Oct 2002 01:35:02 -0000 1.6
@@ -1 +1 @@
-/*
* $Header$
* $Revision$
* $Date$
*
*
====================================================================
*
* The Apache
Software License, Version 1.1
*
* Copyright (c) 1999 The Apache Software Foundation.
All rights
* reserved.
*
* Redistribution and use in source and binary forms, with
or without
* modification, are permitted provided that the following conditions
*
are met:
*
* 1. Redistributions of source code must retain the above copyright
*
notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions
in binary form must reproduce the above copyright
* notice, this list of
conditions and the following disclaimer in
* the documentation and/or other
materials provided with the
* distribution.
*
* 3. The end-user documentation
included with the redistribution, if
* any, must include the following
acknowlegement:
* "This product includes software developed by the
*
Apache Software Foundation (http://www.apache.org/)."
* Alternately, this
acknowlegement may appear in the software itself,
* if and wherever such
third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project",
"Struts", and "Apache Software
* Foundation" must not be used to endorse or
promote products derived
* from this software without prior written permission.
For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products
derived from this software may not be called "Apache"
* nor may "Apache" appear in
their names without prior written
* permission of the Apache Group.
*
* THIS
SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE
FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
*
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
*
SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on
behalf of the Apache Software Foundation. For more
* information on the Apache
Software Foundation, please see
* <http://www.apache.org/>.
*/
package
org.apache.struts.validator;
import java.io.Serializable;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import
org.apache.commons.validator.Validator;
import
org.apache.commons.validator.ValidatorException;
import
org.apache.commons.validator.ValidatorResults;
import
org.apache.struts.action.ActionErrors;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.ActionMapping;
import
org.apache.struts.util.StrutsValidatorUtil;
/**
* <p>This class extends
<strong>DynaActionForm</strong> and provides
* basic field validation based on an XML
file. The key passed into the
* validator is the action element's 'name' attribute
from the
* struts-config.xml which should match the form element's name attribute
*
in the validation.xml.</p>
*
* <ul><li>See <code>ValidatorPlugin</code> definition
in struts-config.xml
* for validation rules.</li></ul>
*
* @author David
Winterfeldt
* @version $Revision$ $Date$
* @since Struts 1.1
* @see
org.apache.struts.action.ActionForm
*/
public class DynaValidatorForm extends
DynaActionForm implements DynaBean, Serializable {
/**
* Commons Logging
instance.
*/
private static Log log =
LogFactory.getLog(DynaValidatorForm.class);
/**
* The results returned from
the validation performed
* by the <code>Validator</code>.
*/
protected
ValidatorResults validatorResults = null;
/**
* Used to indicate the current
page of a multi-page form.
*/
protected int page = 0;
/**
* Gets
page.
* @return page number.
*/
public int getPage() {
return
page;
}
/**
* Sets page.
* @param page page number
*/
public
void setPage(int page) {
this.page = page;
}
/**
* Validate the
properties that have been set from this HTTP request,
* and return an
<code>ActionErrors</code> object that encapsulates any
* validation errors that
have been found. If no errors are found, return
* <code>null</code> or an
<code>ActionErrors</code> object with no
* recorded error messages.
*
*
@param mapping The mapping used to select this instance
* @param request The
servlet request we are processing
* @return <code>ActionErrors</code> object that
encapsulates any validation errors
*/
public ActionErrors
validate(ActionMapping mapping,
HttpServletRequest
request) {
ServletContext application = getServlet().getServletContext();
ActionErrors errors = new ActionErrors();
Validator validator =
StrutsValidatorUtil.initValidator(mapping.getAttribute(),
this,
application, request,
errors, page);
try {
validatorResults = validator.validate();
} catch (ValidatorException e) {
log.error(e.getMessage(), e);
}
return errors;
}
/**
* Convenience method that call the
comparable servlet log method and writes
* an explanatory message and a stack
trace for a given Throwable exception to the
* servlet log file.
*
*
@param message String that describes the error or exception
*/
protected void log(String message) {
if (getServlet().getDebug() >= 1) {
getServlet().log(message);
}
}
/**
* Convenience method
that call the comparable servlet log method and writes
* an explanatory message
and a stack trace for a given Throwable exception to the
* servlet log file.
*
* @param message String that describes the error or exception
*
@param throwable Throwable error or exception
*/
protected void
log(String message, Throwable throwable) {
if (getServlet().getDebug() >= 1) {
getServlet().log(message, throwable);
}
}
/**
* Reset
all properties to their default values.
*
* @param mapping The mapping used
to select this instance
* @param request The servlet request we are processing
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
super.reset(mapping, request);
page = 0;
validatorResults = null;
}
/**
* Get results of the validation performed by the
*
<code>Validator</code>.
* @return validator results as ValidatorResults object
*/
public ValidatorResults getValidatorResults() {
return
validatorResults;
}
/**
* Set results of the validation performed by the
* <code>Validator</code>.
* @param validatorResults Set results of the
validation performed
*/
public void setValidatorResults(ValidatorResults
validatorResults) {
this.validatorResults = validatorResults;
}
/**
* Returns a <code>Map</code> of values returned
* from any validation that
returns a value other than
* <code>null</code> or <code>Boolean</code> with the
* key the full property path of the field.
* @return Returns a <code>Map</code>
of values, otherwise returns null if no results.
*/
public Map
getResultValueMap() {
return (validatorResults != null ?
validatorResults.getResultValueMap() : null);
}
}
\ No newline at end of file
+/*
* $Header$
* $Revision$
* $Date$
*
*
====================================================================
*
* The Apache
Software License, Version 1.1
*
* Copyright (c) 1999 The Apache Software Foundation.
All rights
* reserved.
*
* Redistribution and use in source and binary forms, with
or without
* modification, are permitted provided that the following conditions
*
are met:
*
* 1. Redistributions of source code must retain the above copyright
*
notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions
in binary form must reproduce the above copyright
* notice, this list of
conditions and the following disclaimer in
* the documentation and/or other
materials provided with the
* distribution.
*
* 3. The end-user documentation
included with the redistribution, if
* any, must include the following
acknowlegement:
* "This product includes software developed by the
*
Apache Software Foundation (http://www.apache.org/)."
* Alternately, this
acknowlegement may appear in the software itself,
* if and wherever such
third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project",
"Struts", and "Apache Software
* Foundation" must not be used to endorse or
promote products derived
* from this software without prior written permission.
For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products
derived from this software may not be called "Apache"
* nor may "Apache" appear in
their names without prior written
* permission of the Apache Group.
*
* THIS
SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE
FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
*
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
*
SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on
behalf of the Apache Software Foundation. For more
* information on the Apache
Software Foundation, please see
* <http://www.apache.org/>.
*/
package
org.apache.struts.validator;
import java.io.Serializable;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import
org.apache.commons.validator.Validator;
import
org.apache.commons.validator.ValidatorException;
import
org.apache.commons.validator.ValidatorResults;
import
org.apache.struts.action.ActionErrors;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.ActionMapping;
/**
* <p>This class extends
<strong>DynaActionForm</strong> and provides
* basic field validation based on an XML
file. The key passed into the
* validator is the action element's 'name' attribute
from the
* struts-config.xml which should match the form element's name attribute
*
in the validation.xml.</p>
*
* <ul><li>See <code>ValidatorPlugin</code> definition
in struts-config.xml
* for validation rules.</li></ul>
*
* @author David
Winterfeldt
* @version $Revision$ $Date$
* @since Struts 1.1
* @see
org.apache.struts.action.ActionForm
*/
public class DynaValidatorForm extends
DynaActionForm implements DynaBean, Serializable {
/**
* Commons Logging
instance.
*/
private static Log log =
LogFactory.getLog(DynaValidatorForm.class);
/**
* The results returned from
the validation performed
* by the <code>Validator</code>.
*/
protected
ValidatorResults validatorResults = null;
/**
* Used to indicate the current
page of a multi-page form.
*/
protected int page = 0;
/**
* Gets
page.
* @return page number.
*/
public int getPage() {
return
page;
}
/**
* Sets page.
* @param page page number
*/
public
void setPage(int page) {
this.page = page;
}
/**
* Validate the
properties that have been set from this HTTP request,
* and return an
<code>ActionErrors</code> object that encapsulates any
* validation errors that
have been found. If no errors are found, return
* <code>null</code> or an
<code>ActionErrors</code> object with no
* recorded error messages.
*
*
@param mapping The mapping used to select this instance
* @param request The
servlet request we are processing
* @return <code>ActionErrors</code> object that
encapsulates any validation errors
*/
public ActionErrors
validate(ActionMapping mapping,
HttpServletRequest
request) {
ServletContext application = getServlet().getServletContext();
ActionErrors errors = new ActionErrors();
Validator validator =
Resources.initValidator(mapping.getAttribute(),
this,
application, request,
errors,
page);
try {
validatorResults = validator.validate();
}
catch (ValidatorException e) {
log.error(e.getMessage(), e);
}
return errors;
}
/**
* Convenience method that call the comparable
servlet log method and writes
* an explanatory message and a stack trace for a
given Throwable exception to the
* servlet log file.
*
* @param
message String that describes the error or exception
*/
protected void
log(String message) {
if (getServlet().getDebug() >= 1) {
getServlet().log(message);
}
}
/**
* Convenience method that call
the comparable servlet log method and writes
* an explanatory message and a stack
trace for a given Throwable exception to the
* servlet log file.
*
*
@param message String that describes the error or exception
* @param
throwable Throwable error or exception
*/
protected void log(String
message, Throwable throwable) {
if (getServlet().getDebug() >= 1) {
getServlet().log(message, throwable);
}
}
/**
* Reset all
properties to their default values.
*
* @param mapping The mapping used to
select this instance
* @param request The servlet request we are processing
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
super.reset(mapping, request);
page = 0;
validatorResults = null;
}
/**
* Get results of the validation performed by the
*
<code>Validator</code>.
* @return validator results as ValidatorResults object
*/
public ValidatorResults getValidatorResults() {
return
validatorResults;
}
/**
* Set results of the validation performed by the
* <code>Validator</code>.
* @param validatorResults Set results of the
validation performed
*/
public void setValidatorResults(ValidatorResults
validatorResults) {
this.validatorResults = validatorResults;
}
/**
* Returns a <code>Map</code> of values returned
* from any validation that
returns a value other than
* <code>null</code> or <code>Boolean</code> with the
* key the full property path of the field.
* @return Returns a <code>Map</code>
of values, otherwise returns null if no results.
*/
public Map
getResultValueMap() {
return (validatorResults != null ?
validatorResults.getResultValueMap() : null);
}
}
\ No newline at end of file
1.6 +5 -6
jakarta-struts/src/share/org/apache/struts/validator/ValidatorActionForm.java
Index: ValidatorActionForm.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/validator/ValidatorActionForm.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ValidatorActionForm.java 16 Oct 2002 22:41:42 -0000 1.5
+++ ValidatorActionForm.java 18 Oct 2002 01:35:02 -0000 1.6
@@ -71,7 +71,6 @@
import org.apache.commons.validator.ValidatorException;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
-import org.apache.struts.util.StrutsValidatorUtil;
/**
@@ -113,7 +112,7 @@
ServletContext application = getServlet().getServletContext();
ActionErrors errors = new ActionErrors();
- Validator validator = StrutsValidatorUtil.initValidator(mapping.getPath(),
+ Validator validator = Resources.initValidator(mapping.getPath(),
this,
application, request,
errors, page);
1.7 +1 -1
jakarta-struts/src/share/org/apache/struts/validator/ValidatorForm.java
Index: ValidatorForm.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/validator/ValidatorForm.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ValidatorForm.java 16 Oct 2002 22:41:42 -0000 1.6
+++ ValidatorForm.java 18 Oct 2002 01:35:02 -0000 1.7
@@ -1 +1 @@
-/*
* $Header$
* $Revision$
* $Date$
*
*
====================================================================
*
* The Apache
Software License, Version 1.1
*
* Copyright (c) 1999 The Apache Software Foundation.
All rights
* reserved.
*
* Redistribution and use in source and binary forms, with
or without
* modification, are permitted provided that the following conditions
* are
met:
*
* 1. Redistributions of source code must retain the above copyright
*
notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions
in binary form must reproduce the above copyright
* notice, this list of
conditions and the following disclaimer in
* the documentation and/or other
materials provided with the
* distribution.
*
* 3. The end-user documentation
included with the redistribution, if
* any, must include the following
acknowlegement:
* "This product includes software developed by the
*
Apache Software Foundation (http://www.apache.org/)."
* Alternately, this
acknowlegement may appear in the software itself,
* if and wherever such
third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project",
"Struts", and "Apache Software
* Foundation" must not be used to endorse or
promote products derived
* from this software without prior written permission.
For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products
derived from this software may not be called "Apache"
* nor may "Apache" appear in
their names without prior written
* permission of the Apache Group.
*
* THIS
SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE
FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
*
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
*
SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on
behalf of the Apache Software Foundation. For more
* information on the Apache
Software Foundation, please see
* <http://www.apache.org/>.
*/
package
org.apache.struts.validator;
import java.io.Serializable;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.validator.Validator;
import
org.apache.commons.validator.ValidatorException;
import
org.apache.commons.validator.ValidatorResults;
import
org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import
org.apache.struts.util.StrutsValidatorUtil;
/**
* <p>This class extends
<strong>ActionForm</strong> and provides
* basic field validation based on an XML
file. The key passed into the
* validator is the action element's 'name' attribute
from the
* struts-config.xml which should match the form element's name attribute
*
in the validation.xml.</p>
*
* <ul><li>See <code>ValidatorPlugin</code> definition
in struts-config.xml
* for validation rules.</li></ul>
*
* @author David
Winterfeldt
* @version $Revision$ $Date$
* @see org.apache.struts.action.ActionForm
* @since Struts 1.1
*/
public class ValidatorForm extends ActionForm implements
Serializable {
/**
* Commons Logging instance.
*/
private static
Log log = LogFactory.getLog(ValidatorForm.class);
/**
* The results returned
from the validation performed
* by the <code>Validator</code>.
*/
protected ValidatorResults validatorResults = null;
/**
* Used to indicate
the current page of a multi-page form.
*/
protected int page = 0;
/**
* Gets page.
* @return page number
*/
public int getPage() {
return page;
}
/**
* Sets page.
* @param page page number
*/
public void setPage(int page) {
this.page = page;
}
/**
*
Validate the properties that have been set from this HTTP request,
* and return
an <code>ActionErrors</code> object that encapsulates any
* validation errors
that have been found. If no errors are found, return
* <code>null</code> or an
<code>ActionErrors</code> object with no
* recorded error messages.
*
*
@param mapping The mapping used to select this instance
* @param request The
servlet request we are processing
* @return <code>ActionErrors</code> object
that encapsulates any validation errors
*/
public ActionErrors
validate(ActionMapping mapping,
HttpServletRequest
request) {
ServletContext application = getServlet().getServletContext();
ActionErrors errors = new ActionErrors();
Validator validator =
StrutsValidatorUtil.initValidator(mapping.getAttribute(),
this,
application, request,
errors, page);
try {
validatorResults = validator.validate();
} catch (ValidatorException e) {
log.error(e.getMessage(), e);
}
return errors;
}
/**
* Convenience method that call the
comparable servlet log method and writes
* an explanatory message and a stack
trace for a given Throwable exception to the
* servlet log file.
*
*
@param message String that describes the error or exception
*/
protected void log(String message) {
if (getServlet().getDebug() >= 1) {
getServlet().log(message);
}
}
/**
* Convenience method
that call the comparable servlet log method and writes
* an explanatory message
and a stack trace for a given Throwable exception to the
* servlet log file.
*
* @param message String that describes the error or exception
*
@param throwable Throwable error or exception
*/
protected void
log(String message, Throwable throwable) {
if (getServlet().getDebug() >= 1) {
getServlet().log(message, throwable);
}
}
/**
*
Reset all properties to their default values.
*
* @param mapping The mapping
used to select this instance
* @param request The servlet request we are
processing
*/
public void reset(ActionMapping mapping, HttpServletRequest
request) {
super.reset(mapping, request);
page = 0;
validatorResults = null;
}
/**
* Get results of the validation performed
by the
* <code>Validator</code>.
* @return results of the validation
*/
public ValidatorResults getValidatorResults() {
return validatorResults;
}
/**
* Set results of the validation performed by the
*
<code>Validator</code>.
* @param validatorResults results of validation
*/
public void setValidatorResults(ValidatorResults validatorResults) {
this.validatorResults = validatorResults;
}
/**
* Returns a
<code>Map</code> of values returned
* from any validation that returns a value
other than
* <code>null</code> or <code>Boolean</code> with the
* key the
full property path of the field.
* @return <code>Map</code> of non-null values
*/
public Map getResultValueMap() {
return (validatorResults != null ?
validatorResults.getResultValueMap() : null);
}
}
\ No newline at end of file
+/*
* $Header$
* $Revision$
* $Date$
*
*
====================================================================
*
* The Apache
Software License, Version 1.1
*
* Copyright (c) 1999 The Apache Software Foundation.
All rights
* reserved.
*
* Redistribution and use in source and binary forms, with
or without
* modification, are permitted provided that the following conditions
* are
met:
*
* 1. Redistributions of source code must retain the above copyright
*
notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions
in binary form must reproduce the above copyright
* notice, this list of
conditions and the following disclaimer in
* the documentation and/or other
materials provided with the
* distribution.
*
* 3. The end-user documentation
included with the redistribution, if
* any, must include the following
acknowlegement:
* "This product includes software developed by the
*
Apache Software Foundation (http://www.apache.org/)."
* Alternately, this
acknowlegement may appear in the software itself,
* if and wherever such
third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project",
"Struts", and "Apache Software
* Foundation" must not be used to endorse or
promote products derived
* from this software without prior written permission.
For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products
derived from this software may not be called "Apache"
* nor may "Apache" appear in
their names without prior written
* permission of the Apache Group.
*
* THIS
SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE
FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
*
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
*
SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on
behalf of the Apache Software Foundation. For more
* information on the Apache
Software Foundation, please see
* <http://www.apache.org/>.
*/
package
org.apache.struts.validator;
import java.io.Serializable;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.validator.Validator;
import
org.apache.commons.validator.ValidatorException;
import
org.apache.commons.validator.ValidatorResults;
import
org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
/**
* <p>This class extends
<strong>ActionForm</strong> and provides
* basic field validation based on an XML
file. The key passed into the
* validator is the action element's 'name' attribute
from the
* struts-config.xml which should match the form element's name attribute
*
in the validation.xml.</p>
*
* <ul><li>See <code>ValidatorPlugin</code> definition
in struts-config.xml
* for validation rules.</li></ul>
*
* @author David
Winterfeldt
* @version $Revision$ $Date$
* @see org.apache.struts.action.ActionForm
* @since Struts 1.1
*/
public class ValidatorForm extends ActionForm implements
Serializable {
/**
* Commons Logging instance.
*/
private static
Log log = LogFactory.getLog(ValidatorForm.class);
/**
* The results returned
from the validation performed
* by the <code>Validator</code>.
*/
protected ValidatorResults validatorResults = null;
/**
* Used to indicate
the current page of a multi-page form.
*/
protected int page = 0;
/**
* Gets page.
* @return page number
*/
public int getPage() {
return page;
}
/**
* Sets page.
* @param page page number
*/
public void setPage(int page) {
this.page = page;
}
/**
*
Validate the properties that have been set from this HTTP request,
* and return
an <code>ActionErrors</code> object that encapsulates any
* validation errors
that have been found. If no errors are found, return
* <code>null</code> or an
<code>ActionErrors</code> object with no
* recorded error messages.
*
*
@param mapping The mapping used to select this instance
* @param request The
servlet request we are processing
* @return <code>ActionErrors</code> object
that encapsulates any validation errors
*/
public ActionErrors
validate(ActionMapping mapping,
HttpServletRequest
request) {
ServletContext application = getServlet().getServletContext();
ActionErrors errors = new ActionErrors();
Validator validator =
Resources.initValidator(mapping.getAttribute(),
this,
application, request,
errors,
page);
try {
validatorResults = validator.validate();
}
catch (ValidatorException e) {
log.error(e.getMessage(), e);
}
return errors;
}
/**
* Convenience method that call the comparable
servlet log method and writes
* an explanatory message and a stack trace for a
given Throwable exception to the
* servlet log file.
*
* @param
message String that describes the error or exception
*/
protected void
log(String message) {
if (getServlet().getDebug() >= 1) {
getServlet().log(message);
}
}
/**
* Convenience method that
call the comparable servlet log method and writes
* an explanatory message and a
stack trace for a given Throwable exception to the
* servlet log file.
*
* @param message String that describes the error or exception
* @param
throwable Throwable error or exception
*/
protected void log(String
message, Throwable throwable) {
if (getServlet().getDebug() >= 1) {
getServlet().log(message, throwable);
}
}
/**
* Reset all
properties to their default values.
*
* @param mapping The mapping used to
select this instance
* @param request The servlet request we are processing
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
super.reset(mapping, request);
page = 0;
validatorResults = null;
}
/**
* Get results of the validation performed by the
*
<code>Validator</code>.
* @return results of the validation
*/
public
ValidatorResults getValidatorResults() {
return validatorResults;
}
/**
* Set results of the validation performed by the
*
<code>Validator</code>.
* @param validatorResults results of validation
*/
public void setValidatorResults(ValidatorResults validatorResults) {
this.validatorResults = validatorResults;
}
/**
* Returns a
<code>Map</code> of values returned
* from any validation that returns a value
other than
* <code>null</code> or <code>Boolean</code> with the
* key the
full property path of the field.
* @return <code>Map</code> of non-null values
*/
public Map getResultValueMap() {
return (validatorResults != null ?
validatorResults.getResultValueMap() : null);
}
}
\ No newline at end of file
--
To unsubscribe, e-mail: <mailto:struts-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-dev-help@;jakarta.apache.org>