Hi Laurie, Thanks for responding. > Firstly, the check for marks <= 100 in the validwhen rule is redundant,
True! I realize that and have removed that. > Second, shouldn't you allow an empty value for marks if degree.id isn't set, > rather than forcing the user to enter numeric data that's going to be > ignored? I really dont care about what the user enters for marks if he chooses "none" for the degree. I dont care even if he enters a alpha-numeric .. because that would get converted to a zero before the validator acts on it. >What makes you think the validator is doing a string rather than numeric comparison? Lets do a small change to illustrate that it is indeed doing a string comparision....(may be its doing something else but not numeric comparision! ) Reconsider the following (with changed values just to illustrate the point): I changed the max value to 500 from 100 and I have removed the redundant "100>=" check as you pointed out. When I choose the degree and enter 36 for marks.. there is no validation error (which is expected). However, when I enter 123, which is numerically greater than 35 but "stringically" lesser than 35, then it throws up a validation error. Similarly 349 fails the validation but 351 passes it! Similarly 7 passes the validation test inspite of it being less than 35 numerically ! What I see is that when I enter 65 which is "stringically" greater than 500 ... it passes the validation as if to suggest it is a numerical comparision indeed! But note that this check is being performed by the floatRange validation and not the validwhen rule. So I guess floatRange and intRange work as expected but validwhen does a string comparision. In theory (at least) I dont see any reason why validwhen cant do a more semantically correct comparision. And on a side note.. cant I specify a "lesser than" operation in my checks ... should i always have to work around by swapping the numbers and convert the expression to "greater than" ... bcoz my IDE seems to be complaining abt the DTD mismatch when I try the "lesser than" operation. I hope I am using the right DTD: <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> Any light ? Thanks. Best Regards, Raghu ---- <field property="marks" indexedListProperty="educationDetails" depends="float,floatRange,validwhen"> <arg name="floatRange" key="${var:min}" resource="false" position="1" /> <arg name="floatRange" key="${var:max}" resource="false" position="2" /> <var> <var-name>min</var-name> <var-value>0</var-value> </var> <var> <var-name>max</var-name> <var-value>500</var-value> </var> <var> <var-name>test</var-name> <var-value>((educationDetails[0].degree.id == -1) or (educationDetails[0].marks >= 35)) </var-value> </var> <arg0 key="Education Details Percentage(s) greater than 35% and less than 500% " resource="false"/> </field> ----- On 11/25/05, Laurie Harper <[EMAIL PROTECTED]> wrote: > > Raghu Kanchustambham wrote: > > Hi, > > I have the following situation: > > 1. educationDetails[0].degree.id is not chosen. (drop down return value > = > > -1). > > > > OR > > > > 2. educationDetails[0].degree.id > 0 (the user chose one of the options > from > > the drop down) which implies the marks should be atleast 35% and not > more > > than 100% > > > > I tried the attached validation... but here is my dilema... > > > > a. If I choose minimum percentage to be 35 in the validation file .. as > > <var-name>min</var-name> > > <var-value>35</var-value> > > the user will not have the choice to leave it as zero if he doesnt > > choose the degree (zero I think is the most appropriate value for marks > if > > the degree is not chosen) > > > > > > b. Because of (a) I am forced to leave the lower bound as 0 in the float > > range validation. However, using validwhen tag .. when I tried to check > 100 > >> = marks, it is doing a string comparision though the underlying > datatypes > > are floats. This behavior beats me ... because I know if I provide a > > non-number in the field it would get converted to zero by JSP, but why > > should the validator do a string comparision and not the int/float > > comparisions? Afterall the validator is invoked after the form is > > filled...it has the "luxury" to use "typed" comparisions... am i missing > > something? Can someone fill in the gaps in my understanding and also > suggest > > How should I solve this problem in an elegant fashion? > > > > > > <field property="marks" indexedListProperty="educationDetails" > > depends="float,floatRange,validwhen"> > > <arg name="floatRange" key="${var:min}" resource="false" > > position="1" /> > > <arg name="floatRange" key="${var:max}" resource="false" > > position="2" /> > > <var> > > <var-name>min</var-name> > > <var-value>0</var-value> > > </var> > > <var> > > <var-name>max</var-name> > > <var-value>100</var-value> > > </var> > > <var> > > <var-name>test</var-name> > > <var-value>((educationDetails[0].degree.id == -1) > or > > ((educationDetails[0].marks >= 35) and (100 >= > educationDetails[0].marks))) > > </var-value> > > </var> > > <arg0 key="Education Details Percentage(s) greater than > 35% > > and less than 100% " resource="false"/> > > </field> > > > > > > Thanks much. > > Regards, > > Raghu > > Firstly, the check for marks <= 100 in the validwhen rule is redundant, > since that's alredy being checked by the floatRange check. Second, > shouldn't you allow an empty value for marks if degree.id isn't set, > rather than forcing the user to enter numeric data that's going to be > ignored? > > That said, I'm not sure why the check as you have written it wouldn't > work. What makes you think the validator is doing a string rather than > numeric comparison? And why for the <=100 check but not the >=35 check? > If that's really the case, you could try swapping the operands to put > the variable reference on the left hand side (i.e. write the check in > the same order as the >=35 check). > > L. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >