You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shale.apache.org by gv...@apache.org on 2007/03/16 05:22:49 UTC

svn commit: r518857 - in /shale/framework/branches/SHALE_1_0_X: shale-apps/shale-usecases/pom.xml shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java

Author: gvanmatre
Date: Thu Mar 15 21:22:48 2007
New Revision: 518857

URL: http://svn.apache.org/viewvc?view=rev&rev=518857
Log:
This fix is attached to SHALE-413.  The first attempt was incomplete.  The server side validator variables were not being resolved at render time.  The previous fix only addressed the arguments used to create the server side error message.


Modified:
    shale/framework/branches/SHALE_1_0_X/shale-apps/shale-usecases/pom.xml
    shale/framework/branches/SHALE_1_0_X/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java

Modified: shale/framework/branches/SHALE_1_0_X/shale-apps/shale-usecases/pom.xml
URL: http://svn.apache.org/viewvc/shale/framework/branches/SHALE_1_0_X/shale-apps/shale-usecases/pom.xml?view=diff&rev=518857&r1=518856&r2=518857
==============================================================================
--- shale/framework/branches/SHALE_1_0_X/shale-apps/shale-usecases/pom.xml (original)
+++ shale/framework/branches/SHALE_1_0_X/shale-apps/shale-usecases/pom.xml Thu Mar 15 21:22:48 2007
@@ -168,6 +168,13 @@
             <version>1.1.2</version>
         </dependency>
 
+        <dependency>
+            <groupId>oro</groupId>
+            <artifactId>oro</artifactId>
+            <version>2.0.8</version>
+            <scope>runtime</scope>
+        </dependency>
+
     </dependencies>
 
     <build>

Modified: shale/framework/branches/SHALE_1_0_X/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java
URL: http://svn.apache.org/viewvc/shale/framework/branches/SHALE_1_0_X/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java?view=diff&rev=518857&r1=518856&r2=518857
==============================================================================
--- shale/framework/branches/SHALE_1_0_X/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java (original)
+++ shale/framework/branches/SHALE_1_0_X/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java Thu Mar 15 21:22:48 2007
@@ -482,7 +482,7 @@
      * assumed to be "message" for message argument grouping.</p>
      *
      * @param ruleName name of the validation rule
-     * @param localVars snapshot of EL vars captured at renderering time
+     * @param localVars snapshot of EL vars captured at rendering time
      *        and used by the script collector
      * @return array of objects used to fill the message
      */
@@ -698,9 +698,10 @@
      * @param context faces context
      * @param validatorAction <code>ValidatorAction</code> configuration bean.
      * @param methodParamClasses <code>Class[]</code> of the parameters of the target method.
+     * @param localVars snapshot of EL variables at rendering time; used by client side
      * @return An array of object valuse for each method parameter.
      */
-    protected Object[] loadMethodParamValues(FacesContext context, ValidatorAction validatorAction, Class[] methodParamClasses) {
+    protected Object[] loadMethodParamValues(FacesContext context, ValidatorAction validatorAction, Class[] methodParamClasses, Map localVars) {
         Tags tagUtils = new Tags();
 
         String[] paramNames = getMethodParamNames(validatorAction.getName());
@@ -710,11 +711,17 @@
         assert paramNames.length == methodParamClasses.length;
 
         for (int i = 0; i < paramNames.length; i++) {
-           Object obj = vars.get(paramNames[i]);
-           if (obj != null && obj instanceof String) {
-              obj = tagUtils.eval((String) obj);
-           }
-           target[i] = convert(context, obj, methodParamClasses[i]);
+            Object obj = null;
+            if (localVars != null && localVars.containsKey(paramNames[i])) {
+                obj = localVars.get(paramNames[i]);   
+            }
+            if (obj == null) {
+                obj = vars.get(paramNames[i]);
+            }
+            if (obj != null && obj instanceof String) {
+                obj = tagUtils.eval((String) obj);
+            }
+            target[i] = convert(context, obj, methodParamClasses[i]);
         }
 
         return target;
@@ -794,16 +801,7 @@
                } else {
                   vars.put(SUBMITTED_VALUE_VARNAME, value);
                }
-               Class validatorClass = loadValidatorClass(validatorAction);
-               Class[] paramClasses = this.loadMethodParamClasses(validatorAction);
-               Object[] paramValues = this.loadMethodParamValues(context, validatorAction, paramClasses);
-               Method validatorMethod = this.loadValidatorMethod(validatorAction, validatorClass,  paramClasses);
-               Object validator = null;
-               if (!Modifier.isStatic(validatorMethod.getModifiers())) {
-                   validator = validatorClass.newInstance();
-               }
-               Boolean r = (Boolean) validatorMethod.invoke(validator, paramValues);
-               
+
                Map localVars = null;
                // A map that captures information about a component that might contain state for commons
                // validators properties.  The map is organized by a hierarchy "clientId/validatorType/vars".
@@ -817,6 +815,16 @@
                    }
                }
 
+               Class validatorClass = loadValidatorClass(validatorAction);
+               Class[] paramClasses = this.loadMethodParamClasses(validatorAction);
+               Object[] paramValues = this.loadMethodParamValues(context, validatorAction, paramClasses, localVars);
+               Method validatorMethod = this.loadValidatorMethod(validatorAction, validatorClass,  paramClasses);
+               Object validator = null;
+               if (!Modifier.isStatic(validatorMethod.getModifiers())) {
+                   validator = validatorClass.newInstance();
+               }
+               Boolean r = (Boolean) validatorMethod.invoke(validator, paramValues);
+               
                if (r.equals(Boolean.FALSE)) {
                    throw new ValidatorException(new FacesMessage(
                            FacesMessage.SEVERITY_ERROR,
@@ -896,7 +904,7 @@
      *    with the errant value.</p>
      * @param context the all knowing faces conext object.
      * @param validatorAction config bean defining the commons validator rule.
-     * @param localVars snapshot of EL variables at renderering time; used by client side
+     * @param localVars snapshot of EL variables at rendering time; used by client side
      * @return the message after parameter substitution.
      */
    public String getErrorMessage(FacesContext context, ValidatorAction validatorAction, Map localVars) {