Author: gvanmatre
Date: Thu Mar 15 21:24:27 2007
New Revision: 518858

URL: http://svn.apache.org/viewvc?view=rev&rev=518858
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/trunk/shale-apps/shale-usecases/pom.xml
    
shale/framework/trunk/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java

Modified: shale/framework/trunk/shale-apps/shale-usecases/pom.xml
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-apps/shale-usecases/pom.xml?view=diff&rev=518858&r1=518857&r2=518858
==============================================================================
--- shale/framework/trunk/shale-apps/shale-usecases/pom.xml (original)
+++ shale/framework/trunk/shale-apps/shale-usecases/pom.xml Thu Mar 15 21:24:27 
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/trunk/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java
URL: 
http://svn.apache.org/viewvc/shale/framework/trunk/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java?view=diff&rev=518858&r1=518857&r2=518858
==============================================================================
--- 
shale/framework/trunk/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java
 (original)
+++ 
shale/framework/trunk/shale-validator/src/main/java/org/apache/shale/validator/CommonsValidator.java
 Thu Mar 15 21:24:27 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) {


Reply via email to