Details
Description
I ran into a problem this week where validwhen wasn't working correctly when
trying to compare 2 doubles. I have 2 fields, one a minimum value and the other
a maximum value. I setup in the validation.xml this validator dependency:
<field property="sizeHeightMin" depends="required, double" >
<arg0 key="displayName.sizeHeightMin" />
<msg name="double" key="errors.numeric" />
</field>
<field property="sizeHeightMax" depends="required, double, validwhen" >
<arg0 key="displayName.sizeHeightMax" />
<arg1 key="displayName.sizeHeightMin" />
<msg name="double" key="errors.numeric" />
<msg name="validwhen" key="errors.range" />
<var>
<var-name>test</var-name>
<var-value>(this > sizeHeightMin)</var-value>
</var>
</field>
But when I would enter 6.5 for the min and 11.5 for the max it would fail
validation saying that the max was less than the min. After debugging and
tracking down the problem I discovered that the evaluateComparison(Object,
Object, Object) method in ValidWhenParser.class was only checking to see if the
values were integers and if not doing a string comparison, thus the reason I was
getting the validation failure. Also in that method it does a check to see if
the objects passed in are of type Integer.class. Unless I'm missing something I
don't believe that will ever happen since in ValidWhen.class and in the field
method of ValidWhenParser.class you retrieve the value with
ValidatorUtils.getValueAsString(bean, property), thus the value will always be a
string. I have added a patch for this issue and will be sending it in.