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]
>
>

Reply via email to