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