I would like to propose that we add the validateTwoFields functionality to
the validator.  I don't have the source, so I can't submit a "true" patch,
but hopefully this e-mail will get the ball rolling.

Add this method, in my case it's in org.appfuse.webapp.util.ValidationUtil:

        public static boolean validateTwoFields(Object bean, ValidatorAction
va,
        
Field field, ActionErrors errors,
        
HttpServletRequest request) {
                String value =
                        ValidatorUtil.getValueAsString(bean,
field.getProperty());
                String sProperty2 = field.getVarValue("secondProperty");
                String value2 = ValidatorUtil.getValueAsString(bean,
sProperty2);
        
                if (!GenericValidator.isBlankOrNull(value)) {
                        try {
                                if (!value.equals(value2)) {
                                        errors.add(field.getKey(),
        
Resources.getActionError(request, va, field));
        
                                        return false;
                                }
                        } catch (Exception e) {
                                errors.add(field.getKey(),
        
Resources.getActionError(request, va, field));
        
                                return false;
                        }
                }
        
                return true;
        }

Then in validation-rules.xml - add the following for server-side AND
client-side validation:

      <validator name="twofields"
         classname="org.appfuse.webapp.util.ValidationUtil"
         method="validateTwoFields"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionErrors,
                       javax.servlet.http.HttpServletRequest"
         depends="required"
         msg="errors.twofields">
         <javascript><![CDATA[
            function validateTwoFields(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oTwoFields = new twofields();
                for (x in oTwoFields) {
                        var field = form[oTwoFields[x][0]];
                    var secondField =
form[oTwoFields[x][2]("secondProperty")];
                        
                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'select-one' ||
                        field.type == 'radio' ||
                        field.type == 'password') {
                        
                        var value;
                        var secondValue;
                                                // get field's value
                                                if (field.type ==
"select-one") {
                                                        var si =
field.selectedIndex;
                                                        value =
field.options[si].value;
                                                secondValue =
secondField.options[si].value;
                                                } else {
                                                        value = field.value;
                                                secondValue =
secondField.value;
                                                }
                        
                        if (value != secondValue) {
                        
                                if (i == 0) {
                                    focusField = field;
                                }
                                fields[i++] = oTwoFields[x][1];
                                bValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return bValid;
            }]]>
         </javascript>
       </validator>
 
I haven't "thouroughly" tested this, but it's working for me on a
password/confirm password scenario.

Thanks,

Matt


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to