I had a ton of problems with required if.  I finally just ripped it out and
made my own based on it.  In the code I am using, (I am unsure its b2/b3 or
a tip build at this point) I dont see a NOTEQUAL comparison....

Heres what I am using....  See inline comments for explanation. 


public final static String FIELD_TEST_NULL = "NULL";
        public final static String FIELD_TEST_NOTNULL = "NOTNULL";
        public final static String FIELD_TEST_EQUAL = "EQUAL";


        public static boolean validateJSWRequiredIf(Object bean,
                                             ValidatorAction va, Field
field,
                                             ActionErrors errors,
        
org.apache.commons.validator.Validator validator,
                                             HttpServletRequest request) {

                Object form =
validator.getResource(org.apache.commons.validator.Validator.BEAN_KEY);

        boolean required = false;
        String value=null;

        System.out.println("PROPERTY: " + field.getProperty());

        if (isString(bean)) {
            value = (String) bean;
        } else {
            value = ValidatorUtil.getValueAsString(bean,
field.getProperty());

        }

        System.out.println("VALUE from VsValidate: " +  value);

        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 +
"]");

            System.out.println("DEPEND PROP: " + dependProp);
            System.out.println("DEPEND Test: " + dependTest);
            System.out.println("DEPEND TEST VALUE: " + dependTestValue);


            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);
                
                //HAD TO ADD THIS TO DO AN EQUALS COMPARISON
                String dependPropValue =
ValidatorUtil.getValueAsString(bean, dependProp);
                if ( ! dependTestValue.equals( dependPropValue ) ){
                   System.out.println("print here-------");
                   return false;
                }
                //END ADDTION
            }


            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(),
Resources.getActionError(request, va, field));
        
errors.add(field.getKey(),StrutsValidatorUtil.getActionError(request,va,fiel
d));
                return false;
            }
        }
        return true;
    }


Jeremy Weber                    
[EMAIL PROTECTED]


-----Original Message-----
From: Wendy Smoak [mailto:[EMAIL PROTECTED]]
Sent: Thursday, January 30, 2003 12:41 PM
To: 'Struts Users Mailing List'
Subject: RE: [VALIDATOR] requiredif ??



I'm Still struggling with requiredif... there doesn't seem to be a working
example of it included with 1.1b3.  I've gone through the documentation and
come up with this.  I'm trying to say that address is required only if
  1. prospect is null
  2. prospectNameOrId is not null
  3. action is not equal to "Add Prospect"

<field property="address" depends="requiredif">
  <arg0 key="label.prospect.address"/>
  <var>
    <var-name>field[0]</var-name>
    <var-value>prospect</var-value>
  </var>
  <var>
    <var-name>field-test[0]</var-name>
    <var-value>NULL</var-value>
  </var>
  <var>
    <var-name>field[1]</var-name>
    <var-value>prospectNameOrId</var-value>
  </var>
  <var>
    <var-name>field-test[1]</var-name>
    <var-value>NOTNULL</var-value>
  </var>
  <var>
    <var-name>field[2]</var-name>
    <var-value>action</var-value>
  </var>
  <var>
    <var-name>field-test[2]</var-name>
    <var-value>NOTEQUAL</var-value>
  </var>
  <var>
    <var-name>field-value[2]</var-name>
    <var-value>Add Prospect</var-value>
  </var>
  <var>
    <var-name>field-join</var-name>
    <var-value>AND</var-value>
  </var>
</field>

Thanks,

-- 
Wendy Smoak
Applications Systems Analyst, Sr.
Arizona State University PA Information Resources Management

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

Reply via email to