You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Paul Benedict (JIRA)" <ji...@apache.org> on 2007/08/25 18:55:34 UTC

[jira] Commented: (STR-2321) [validator] Unable to do validwhen comparisons of doubles.

    [ https://issues.apache.org/struts/browse/STR-2321?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_42018 ] 

Paul Benedict commented on STR-2321:
------------------------------------

I propose a fix by instantiating BigDecimal instead of Integer. Therefore, the developer would first run the integer or double validator (ensuring correct type) and then validwhen.

> [validator] Unable to do validwhen comparisons of doubles.
> ----------------------------------------------------------
>
>                 Key: STR-2321
>                 URL: https://issues.apache.org/struts/browse/STR-2321
>             Project: Struts 1
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: Nightly Build
>         Environment: Operating System: Windows XP
> Platform: PC
>            Reporter: Nate Minshew
>            Assignee: Struts Developers
>            Priority: Minor
>         Attachments: ValidWhenParser.java
>
>
> 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.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.