I just responded to one of your earlier messages.  I believe that
solution will work for your problem here too.

-Dennis

On Fri, 2003-01-24 at 11:01, Weber, Jeremy wrote:
> It seems to me that whenever I use requiredif and an additional custom
> validation to validate the same field, the requiredif always passes and
> therefore the second validation is called.  
> 
> Below I have cut some snippets from my code.  What I want to do is, require
> properties B & C if property A is true.  Then after they are required I want
> to do more validation.  Specifically I need to be able to call custom
> validators such 'portRange'.  If I replace portRange in VALIDATION.XML
> (below) with an included validation like integer or email, it works
> perfectly.  Why the difference between the custom validation and the shipped
> ones?  Perhaps I am not including something in my portRange definition or
> code that is needed?  Or perhaps I am just out of my mind...:)
> 
> If someone smarted than me could check this out I would appreciate it....
> 
> 
> TESTFORM.JSP
> <table bgcolor=white border=0 width="45%">
> <tr valign>
>       <td><bean:message key="test.a.displayname"/></td>
>       <td><html:text property="a" size=25 styleClass="input"/></td>
> </tr>
> <tr valign>
>       <td><bean:message key="test.b.displayname"/></td>
>       <td><html:text property="b" size=25 styleClass="input" /></td>
> </tr>
> <tr valign>
>       <td class="mandatory"><bean:message key="test.c.displayname"/></td>
>       <td><html:text property="c" size=25 styleClass="input"/></td>
> </tr>
> <tr><td colspan=2><html:submit/></td></tr>
> </html:form>
> 
> 
> VALIDATION.XML
>                       <field  property="a"
>                               depends="required">
>                               <arg0 key="test.a.displayname"/>
>                       <field  property="b"
>                               depends="requiredif,email">
>                               <arg0 key="test.b.displayname"/>
>                               <var>
>                                       <var-name>field[0]</var-name>
>                                       <var-value>a</var-value>
>                               </var>
>                               <var>
>                                       <var-name>field-test[0]</var-name>
>                                       <var-value>EQUAL</var-value>
>                               </var>
>                               <var>
>                                       <var-name>field-value[0]</var-name>
>                                       <var-value>true</var-value>
>                               </var>
>                       </field>
>                       <field  property="c"
>                               depends="requiredif,portRange">
>                               <arg0 key="test.c.displayname"/>
>                               <var>
>                                       <var-name>field[0]</var-name>
>                                       <var-value>a</var-value>
>                               </var>
>                               <var>
>                                       <var-name>field-test[0]</var-name>
>                                       <var-value>EQUAL</var-value>
>                               </var>
>                               <var>
>                                       <var-name>field-value[0]</var-name>
>                                       <var-value>true</var-value>
>                               </var>
>                       </field>
> 
> 
> 
> 
> <validator name="portRange"
>                classname="com.vendorsite.install.util.validate.VsValidate"
>                method="validatePortRange"
>                methodParams="java.lang.Object,
>                org.apache.commons.validator.ValidatorAction,
>                      org.apache.commons.validator.Field,
>                      org.apache.struts.action.ActionErrors,
>                      javax.servlet.http.HttpServletRequest"
>                msg="errors.portRange">
> </validator>
> 
> And the actual code is this...
> 
>               public static boolean validatePortRange(java.lang.Object
> bean,
>                     org.apache.commons.validator.ValidatorAction va,
>                     org.apache.commons.validator.Field field,
>                     org.apache.struts.action.ActionErrors errors,
>                     javax.servlet.http.HttpServletRequest request ) {
> 
>                     System.out.println("In PortRange
> method--------------------------------");
>                     String temp = ValidatorUtil.getValueAsString(bean,
> field.getProperty());
>                     String field1 = field.getProperty();
>                     System.out.println("FIELD: " + field1);
>                     System.out.println("VALUE: " + temp);
>                     String sProperty2 =
> field.getVarValue("secondProperty");
>                     Map userData = (Map)
> (request.getSession(false).getAttribute("userData"));
>                     int number =
> Integer.parseInt(userData.get(sProperty2).toString());
>                     Integer test;
>                     Enumeration enum;
> 
> 
> 
>                     System.out.println("NUM: " + number +
> "--------------------------------");
> 
>                     Vector v = VectorUtil.convert(temp);
>                     if (v == null){
>       
> errors.add(field.getKey(),StrutsValidatorUtil.getActionError(request,va,fiel
> d));
>                        System.out.println("First failure");
>                        return false;
>                     } else if (v.size() != number){
>                        System.out.println(v.size());
>                        System.out.println("Second failure");
>       
> errors.add(field.getKey(),StrutsValidatorUtil.getActionError(request,va,fiel
> d));
>                        return false;
>                     } else {
>                            //check to see if port nums make min max values
>                                 enum = v.elements ();
>                                 while (enum.hasMoreElements ()){
>                                       test = (Integer)enum.nextElement();
>                                       System.out.println("TEST: " + test);
>                                       if (test.intValue() < 1 ||
> test.intValue() > 65535){
>                                               System.out.println("Third
> failure");
>                                               return false;
>                                       }
>                                 }
> 
> 
>                     }
>               return true;
>               }
> 
> Thanks
> 
> Jeremy Weber                        
> [EMAIL PROTECTED]
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
-- 
Dennis Muhlestein <[EMAIL PROTECTED]>
ZServe Corporation


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

Reply via email to