You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by ni...@apache.org on 2005/03/28 19:35:48 UTC

svn commit: r159268 - in struts/core/trunk: conf/share/validator-rules.xml src/share/org/apache/struts/action/ActionMessage.java src/share/org/apache/struts/validator/FieldChecks.java src/share/org/apache/struts/validator/Resources.java src/share/org/apache/struts/validator/validwhen/ValidWhen.java

Author: niallp
Date: Mon Mar 28 09:35:46 2005
New Revision: 159268

URL: http://svn.apache.org/viewcvs?view=rev&rev=159268
Log:
Bug 21760 Validator support for non-default Resource bundles reported by Adam Kramer

Modified:
    struts/core/trunk/conf/share/validator-rules.xml
    struts/core/trunk/src/share/org/apache/struts/action/ActionMessage.java
    struts/core/trunk/src/share/org/apache/struts/validator/FieldChecks.java
    struts/core/trunk/src/share/org/apache/struts/validator/Resources.java
    struts/core/trunk/src/share/org/apache/struts/validator/validwhen/ValidWhen.java

Modified: struts/core/trunk/conf/share/validator-rules.xml
URL: http://svn.apache.org/viewcvs/struts/core/trunk/conf/share/validator-rules.xml?view=diff&r1=159267&r2=159268
==============================================================================
--- struts/core/trunk/conf/share/validator-rules.xml (original)
+++ struts/core/trunk/conf/share/validator-rules.xml Mon Mar 28 09:35:46 2005
@@ -56,6 +56,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
                   msg="errors.required"/>
 
@@ -89,6 +90,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.minlength"
@@ -102,6 +104,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.maxlength"
@@ -116,6 +119,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.invalid"/>
@@ -128,6 +132,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.byte"
@@ -141,6 +146,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.short"
@@ -154,6 +160,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.integer"
@@ -168,6 +175,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.long"/>
@@ -180,6 +188,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.float"
@@ -192,6 +201,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.double"/>
@@ -204,6 +214,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.date"
@@ -217,6 +228,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends="integer"
                   msg="errors.range"/>
@@ -229,6 +241,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends="float"
                   msg="errors.range"/>
@@ -240,6 +253,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends="double"
                   msg="errors.range"/>
@@ -252,6 +266,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.creditcard"/>
@@ -264,6 +279,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.email"/>
@@ -275,6 +291,7 @@
                        org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages,
+                       org.apache.commons.validator.Validator,
                        javax.servlet.http.HttpServletRequest"
               depends=""
                   msg="errors.url"/>

Modified: struts/core/trunk/src/share/org/apache/struts/action/ActionMessage.java
URL: http://svn.apache.org/viewcvs/struts/core/trunk/src/share/org/apache/struts/action/ActionMessage.java?view=diff&r1=159267&r2=159268
==============================================================================
--- struts/core/trunk/src/share/org/apache/struts/action/ActionMessage.java (original)
+++ struts/core/trunk/src/share/org/apache/struts/action/ActionMessage.java Mon Mar 28 09:35:46 2005
@@ -110,6 +110,20 @@
 
         this.key = key;
         this.values = values;
+        this.resource = true;
+
+    }
+
+    /**
+     * <p>Construct an action message with the specified replacement values.</p>
+     *
+     * @param key Message key for this message
+     * @param resource Indicates whether the key is a bundle key or literal value
+     */
+    public ActionMessage(String key, boolean resource) {
+ 
+        this.key = key;
+        this.resource = resource;
 
     }
 
@@ -128,6 +142,11 @@
      */
     protected Object values[] = null;
 
+    /**
+     * <p>Indicates whether the key is taken to be as a  bundle key [true] or literal value [false].</p>
+     */
+    protected boolean resource = true;
+
 
     // --------------------------------------------------------- Public Methods
 
@@ -148,6 +167,16 @@
     public Object[] getValues() {
 
         return (this.values);
+
+    }
+
+
+    /**
+     * <p>Indicate whether the key is taken to be as a  bundle key [true] or literal value [false].</p>
+     */
+    public boolean isResource() {
+
+        return (this.resource);
 
     }
     

Modified: struts/core/trunk/src/share/org/apache/struts/validator/FieldChecks.java
URL: http://svn.apache.org/viewcvs/struts/core/trunk/src/share/org/apache/struts/validator/FieldChecks.java?view=diff&r1=159267&r2=159268
==============================================================================
--- struts/core/trunk/src/share/org/apache/struts/validator/FieldChecks.java (original)
+++ struts/core/trunk/src/share/org/apache/struts/validator/FieldChecks.java Mon Mar 28 09:35:46 2005
@@ -22,6 +22,7 @@
 import java.util.Locale;
 import java.util.StringTokenizer;
 
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.logging.Log;
@@ -30,6 +31,7 @@
 import org.apache.commons.validator.GenericTypeValidator;
 import org.apache.commons.validator.GenericValidator;
 import org.apache.commons.validator.UrlValidator;
+import org.apache.commons.validator.Validator;
 import org.apache.commons.validator.ValidatorAction;
 import org.apache.commons.validator.util.ValidatorUtils;
 import org.apache.struts.action.ActionMessages;
@@ -69,12 +71,15 @@
      * field being validated.
      * @param errors The <code>ActionMessages</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 validateRequired(Object bean,
                                            ValidatorAction va, Field field,
                                            ActionMessages errors,
+                                           Validator validator,
                                            HttpServletRequest request) {
 
         String value = null;
@@ -85,7 +90,7 @@
         }
 
         if (GenericValidator.isBlankOrNull(value)) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
             return false;
         } else {
             return true;
@@ -111,7 +116,7 @@
     public static boolean validateRequiredIf(Object bean,
                                              ValidatorAction va, Field field,
                                              ActionMessages errors,
-                                             org.apache.commons.validator.Validator validator,
+                                             Validator validator,
                                              HttpServletRequest request) {
 
         Object form = validator.getParameterValue(org.apache.commons.validator.Validator.BEAN_PARAM);
@@ -188,7 +193,7 @@
 			if (GenericValidator.isBlankOrNull(value)) {
 				errors.add(
 					field.getKey(),
-					Resources.getActionMessage(request, va, field));
+					Resources.getActionMessage(validator, request, va, field));
 
                 return false;
 
@@ -209,12 +214,15 @@
      * field being validated.
      * @param errors   The <code>ActionMessages</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 field matches mask, false otherwise.
      */
     public static boolean validateMask(Object bean,
                                        ValidatorAction va, Field field,
                                        ActionMessages errors,
+                                       Validator validator,
                                        HttpServletRequest request) {
 
         String mask = field.getVarValue("mask");
@@ -231,7 +239,7 @@
 
                 errors.add(
                     field.getKey(),
-                    Resources.getActionMessage(request, va, field));
+                    Resources.getActionMessage(validator, request, va, field));
 
                 return false;
             } else {
@@ -253,12 +261,15 @@
      *field being validated.
      *@param errors The <code>ActionMessages</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 valid, false otherwise.
      */
     public static Object validateByte(Object bean,
                                     ValidatorAction va, Field field,
                                     ActionMessages errors,
+                                    Validator validator,
                                     HttpServletRequest request) {
 
         Object result = null;
@@ -276,7 +287,7 @@
         result = GenericTypeValidator.formatByte(value);
 
         if (result == null) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
         }
 
         return result == null ? Boolean.FALSE : result;
@@ -292,12 +303,15 @@
      * field being validated.
      * @param errors The <code>ActionMessages</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 valid, false otherwise.
      */
     public static Object validateShort(Object bean,
                                       ValidatorAction va, Field field,
                                       ActionMessages errors,
+                                      Validator validator,
                                       HttpServletRequest request) {
         Object result = null;
         String value = null;
@@ -314,7 +328,7 @@
         result = GenericTypeValidator.formatShort(value);
 
         if (result == null) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
         }
 
         return result == null ? Boolean.FALSE : result;
@@ -330,12 +344,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 valid, false otherwise.
      */
     public static Object validateInteger(Object bean,
                                           ValidatorAction va, Field field,
                                           ActionMessages errors,
+                                          Validator validator,
                                           HttpServletRequest request) {
         Object result = null;
         String value = null;
@@ -352,7 +369,7 @@
         result = GenericTypeValidator.formatInt(value);
 
         if (result == null) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
         }
 
         return result == null ? Boolean.FALSE : result;
@@ -368,12 +385,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 valid, false otherwise.
      */
     public static Object validateLong(Object bean,
                                     ValidatorAction va, Field field,
                                     ActionMessages errors,
+                                    Validator validator,
                                     HttpServletRequest request) {
         Object result = null;
         String value = null;
@@ -390,7 +410,7 @@
         result = GenericTypeValidator.formatLong(value);
 
         if (result == null) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
         }
 
         return result == null ? Boolean.FALSE : result;
@@ -406,12 +426,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 valid, false otherwise.
      */
     public static Object validateFloat(Object bean,
                                       ValidatorAction va, Field field,
                                       ActionMessages errors,
+                                      Validator validator,
                                       HttpServletRequest request) {
         Object result = null;
         String value = null;
@@ -428,7 +451,7 @@
         result = GenericTypeValidator.formatFloat(value);
 
         if (result == null) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
         }
 
         return result == null ? Boolean.FALSE : result;
@@ -444,12 +467,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 valid, false otherwise.
      */
     public static Object validateDouble(Object bean,
                                         ValidatorAction va, Field field,
                                         ActionMessages errors,
+                                        Validator validator,
                                         HttpServletRequest request) {
         Object result = null;
         String value = null;
@@ -466,7 +492,7 @@
         result = GenericTypeValidator.formatDouble(value);
 
         if (result == null) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
         }
 
         return result == null ? Boolean.FALSE : result;
@@ -488,12 +514,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 valid, false otherwise.
      */
     public static Object validateDate(Object bean,
                                     ValidatorAction va, Field field,
                                     ActionMessages errors,
+                                    Validator validator,
                                     HttpServletRequest request) {
 
         Object result = null;
@@ -524,7 +553,7 @@
         }
 
         if (result == null) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
         }
 
         return result == null ? Boolean.FALSE : result;
@@ -540,12 +569,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 in range, false otherwise.
      */
     public static boolean validateIntRange(Object bean,
                                            ValidatorAction va, Field field,
                                            ActionMessages errors,
+                                           Validator validator,
                                            HttpServletRequest request) {
 
         String value = null;
@@ -562,12 +594,12 @@
                 int max = Integer.parseInt(field.getVarValue("max"));
 
                 if (!GenericValidator.isInRange(intValue, min, max)) {
-                    errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                    errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
 
                     return false;
                 }
             } catch (Exception e) {
-                errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
                 return false;
             }
         }
@@ -585,12 +617,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 in range, false otherwise.
      */
     public static boolean validateDoubleRange(Object bean,
                                               ValidatorAction va, Field field,
                                               ActionMessages errors,
+                                              Validator validator,
                                               HttpServletRequest request) {
 
         String value = null;
@@ -607,12 +642,12 @@
                 double max = Double.parseDouble(field.getVarValue("max"));
 
                 if (!GenericValidator.isInRange(doubleValue, min, max)) {
-                    errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                    errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
 
                     return false;
                 }
             } catch (Exception e) {
-                errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
                 return false;
             }
         }
@@ -630,12 +665,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 in range, false otherwise.
      */
     public static boolean validateFloatRange(Object bean,
                                              ValidatorAction va, Field field,
                                              ActionMessages errors,
+                                             Validator validator,
                                              HttpServletRequest request) {
 
         String value = null;
@@ -652,12 +690,12 @@
                 float max = Float.parseFloat(field.getVarValue("max"));
 
                 if (!GenericValidator.isInRange(floatValue, min, max)) {
-                    errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                    errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
 
                     return false;
                 }
             } catch (Exception e) {
-                errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
                 return false;
             }
         }
@@ -675,12 +713,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 valid, false otherwise.
      */
     public static Object validateCreditCard(Object bean,
                                           ValidatorAction va, Field field,
                                           ActionMessages errors,
+                                          Validator validator,
                                           HttpServletRequest request) {
 
         Object result = null;
@@ -698,7 +739,7 @@
         result = GenericTypeValidator.formatCreditCard(value);
 
         if (result == null) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
         }
 
         return result == null ? Boolean.FALSE : result;
@@ -715,12 +756,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 valid, false otherwise.
      */
     public static boolean validateEmail(Object bean,
                                         ValidatorAction va, Field field,
                                         ActionMessages errors,
+                                        Validator validator,
                                         HttpServletRequest request) {
 
         String value = null;
@@ -731,7 +775,7 @@
         }
 
         if (!GenericValidator.isBlankOrNull(value) && !GenericValidator.isEmail(value)) {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
             return false;
         } else {
             return true;
@@ -749,12 +793,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 stated conditions met.
      */
     public static boolean validateMaxLength(Object bean,
                                             ValidatorAction va, Field field,
                                             ActionMessages errors,
+                                            Validator validator,
                                             HttpServletRequest request) {
 
         String value = null;
@@ -769,12 +816,12 @@
                 int max = Integer.parseInt(field.getVarValue("maxlength"));
 
                 if (!GenericValidator.maxLength(value, max)) {
-                    errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                    errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
 
                     return false;
                 }
             } catch (Exception e) {
-                errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
                 return false;
             }
         }
@@ -793,12 +840,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 stated conditions met.
      */
     public static boolean validateMinLength(Object bean,
                                             ValidatorAction va, Field field,
                                             ActionMessages errors,
+                                            Validator validator,
                                             HttpServletRequest request) {
 
         String value = null;
@@ -813,12 +863,12 @@
                 int min = Integer.parseInt(field.getVarValue("minlength"));
 
                 if (!GenericValidator.minLength(value, min)) {
-                    errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                    errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
 
                     return false;
                 }
             } catch (Exception e) {
-                errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
                 return false;
             }
         }
@@ -851,12 +901,15 @@
      *      field being validated.
      * @param  errors   The <code>ActionMessages</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 valid, false otherwise.
      */
     public static boolean validateUrl(Object bean,
                                         ValidatorAction va, Field field,
                                         ActionMessages errors,
+                                        Validator validator,
                                         HttpServletRequest request) {
 
         String value = null;
@@ -889,7 +942,7 @@
             if (GenericValidator.isUrl(value)) {
                 return true;
             } else {
-                errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+                errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
                 return false;
             }
         }
@@ -913,7 +966,7 @@
         if (urlValidator.isValid(value)) {
             return true;
         } else {
-            errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
+            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
             return false;
         }
     }

Modified: struts/core/trunk/src/share/org/apache/struts/validator/Resources.java
URL: http://svn.apache.org/viewcvs/struts/core/trunk/src/share/org/apache/struts/validator/Resources.java?view=diff&r1=159267&r2=159268
==============================================================================
--- struts/core/trunk/src/share/org/apache/struts/validator/Resources.java (original)
+++ struts/core/trunk/src/share/org/apache/struts/validator/Resources.java Mon Mar 28 09:35:46 2005
@@ -25,6 +25,7 @@
 
 import org.apache.commons.validator.Arg;
 import org.apache.commons.validator.Field;
+import org.apache.commons.validator.Msg;
 import org.apache.commons.validator.Validator;
 import org.apache.commons.validator.ValidatorAction;
 import org.apache.commons.validator.ValidatorResources;
@@ -35,6 +36,7 @@
 import org.apache.struts.util.MessageResources;
 import org.apache.struts.util.ModuleUtils;
 import org.apache.struts.util.RequestUtils;
+import org.apache.struts.config.ModuleConfig;
 
 /**
  * This class helps provides some useful methods for retrieving objects
@@ -108,6 +110,41 @@
     }
 
     /**
+     * Retrieve <code>MessageResources</code> for the module and bundle.
+     * @param application the servlet context
+     * @param request the servlet request
+     * @param bundle the bundle key
+     */
+    public static MessageResources getMessageResources(
+        ServletContext application,
+        HttpServletRequest request,
+        String bundle) {
+
+        if (bundle == null) {
+            bundle = Globals.MESSAGES_KEY;
+        }
+
+        MessageResources resources = (MessageResources)request.getAttribute(bundle);
+
+        if (resources == null) {
+            ModuleConfig moduleConfig = ModuleUtils.getInstance()
+                                         .getModuleConfig(request, application);
+            resources = (MessageResources)application.getAttribute(bundle + moduleConfig.getPrefix());
+        }
+
+        if (resources == null) {
+            resources = (MessageResources)application.getAttribute(bundle);
+        }
+
+        if (resources == null) {
+            throw new NullPointerException("No message resources found for bundle: " + bundle);
+        }
+
+        return resources;
+
+    }
+
+    /**
      * Get the <code>Locale</code> of the current user.
      * @param request servlet request
      * @deprecated Use RequestUtils.getUserLocale() instead.  This will be removed
@@ -170,6 +207,52 @@
 
         return messages.getMessage(locale, msg, args);
     }
+    /**
+     * Gets the <code>Locale</code> sensitive value based on the key passed in.
+     * @param application the servlet context
+     * @param request the servlet request
+     * @param defaultMessages The default Message resources
+     * @param locale The locale
+     * @param va The Validator Action
+     * @param field The Validator Field
+     */
+    public static String getMessage(ServletContext application,
+                                    HttpServletRequest request,
+                                    MessageResources defaultMessages,
+                                    Locale locale,
+                                    ValidatorAction va,
+                                    Field field) {
+
+        Msg msg = field.getMessage(va.getName());
+        if (msg != null && !msg.isResource()) {
+            return msg.getKey();
+        }
+
+        String msgKey    = null;
+        String msgBundle = null;
+        MessageResources messages = defaultMessages;
+        if (msg == null) {
+           msgKey = va.getMsg();
+        } else {
+           msgKey    = msg.getKey();
+           msgBundle = msg.getBundle();
+           if (msg.getBundle() != null) {
+               messages = getMessageResources(application, request, msg.getBundle());
+           }
+        }
+
+        if (msgKey == null || msgKey.length() == 0) {
+            return "??? " + va.getName() + "." + field.getProperty() + " ???";
+        }
+
+        // Get the arguments
+        Arg[] args = field.getArgs(va.getName());
+        String[] argValues = getArgValues(application, request, messages, locale, args);
+
+        // Return the message
+        return messages.getMessage(locale, msgKey, argValues);
+
+    }
 
     /**
      * Gets the <code>ActionError</code> based on the 
@@ -230,6 +313,58 @@
     }
 
     /**
+     * Gets the <code>ActionMessage</code> based on the 
+     * <code>ValidatorAction</code> message and the <code>Field</code>'s 
+     * arg objects.
+     * @param validator the Validator
+     * @param request the servlet request
+     * @param va Validator action
+     * @param field the validator Field
+     */
+    public static ActionMessage getActionMessage(
+        Validator validator,
+        HttpServletRequest request,
+        ValidatorAction va,
+        Field field) {
+
+        Msg msg = field.getMessage(va.getName());
+        if (msg != null && !msg.isResource()) {
+            return new ActionMessage(msg.getKey(), false);
+        }
+
+        String msgKey    = null;
+        String msgBundle = null;
+        if (msg == null) {
+           msgKey = va.getMsg();
+        } else {
+           msgKey    = msg.getKey();
+           msgBundle = msg.getBundle();
+        }
+
+        if (msgKey == null || msgKey.length() == 0) {
+            return new ActionMessage("??? " + va.getName() + "." + field.getProperty() + " ???", false);
+        }
+
+        ServletContext application = (ServletContext)validator.getParameterValue(SERVLET_CONTEXT_PARAM);
+        MessageResources messages = getMessageResources(application, request, msgBundle);
+        Locale locale = RequestUtils.getUserLocale(request, null);
+
+        Arg[] args = field.getArgs(va.getName());
+        String[] argValues = getArgValues(application, request, messages, locale, args);
+
+        ActionMessage actionMessage = null;
+        if (msgBundle == null) {
+            actionMessage = new ActionMessage(msgKey, argValues);
+        } else {
+            String message = messages.getMessage(locale, msgKey, argValues);
+            actionMessage = new ActionMessage(message, false);
+        }
+        return actionMessage;
+
+    }
+
+
+    /**
      * Gets the message arguments based on the current 
      * <code>ValidatorAction</code> and <code>Field</code>.
      * @param actionName action name
@@ -266,6 +401,49 @@
         }
 
         return argMessages;
+    }
+
+    /**
+     * Gets the message arguments based on the current 
+     * <code>ValidatorAction</code> and <code>Field</code>.
+     * @param application the servlet context
+     * @param request the servlet request
+     * @param defaultMessages Default message resources
+     * @param locale the locale
+     * @param args The arguments for the message
+     */
+    private static String[] getArgValues(
+        ServletContext application,
+        HttpServletRequest request,
+        MessageResources defaultMessages,
+        Locale locale,
+        Arg[] args) {
+
+        if (args == null || args.length == 0) {
+            return null;
+        }
+
+        String[] values = new String[args.length];
+        for (int i = 0; i < args.length; i++) {
+            if (args[i] != null) {
+                if (args[i].isResource()) {
+
+                    MessageResources messages = defaultMessages;
+                    if (args[i].getBundle() != null) {
+                        messages = getMessageResources(application, request, args[i].getBundle());
+                    }
+                    values[i] = messages.getMessage(locale, args[i].getKey());
+
+                } else {
+
+                    values[i] = args[i].getKey();
+
+                }
+            }
+        }
+
+        return values;
+
     }
 
     /**

Modified: struts/core/trunk/src/share/org/apache/struts/validator/validwhen/ValidWhen.java
URL: http://svn.apache.org/viewcvs/struts/core/trunk/src/share/org/apache/struts/validator/validwhen/ValidWhen.java?view=diff&r1=159267&r2=159268
==============================================================================
--- struts/core/trunk/src/share/org/apache/struts/validator/validwhen/ValidWhen.java (original)
+++ struts/core/trunk/src/share/org/apache/struts/validator/validwhen/ValidWhen.java Mon Mar 28 09:35:46 2005
@@ -117,7 +117,7 @@
             
             errors.add(
                 field.getKey(),
-                Resources.getActionMessage(request, va, field));
+                Resources.getActionMessage(validator, request, va, field));
                 
             return false;
         }
@@ -125,7 +125,7 @@
         if (!valid) {
             errors.add(
                 field.getKey(),
-                Resources.getActionMessage(request, va, field));
+                Resources.getActionMessage(validator, request, va, field));
                 
             return false;
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org