Hi Ed Thanks for the detailed explanation. I'll take your advice on this - sounds like using Strings is going to be much less error prone, and easier to maintain.
Thanks again! Richard Gundersen Java Developer Email: [EMAIL PROTECTED] Phone: 01618302398 Fax: 01618342536 London Scottish Bank plc 24 Mount Street Manchester M2 3LS -----Original Message----- From: Ed Griebel [mailto:[EMAIL PROTECTED] Sent: Thursday, March 01, 2007 4:13 PM To: Struts Users Mailing List Subject: Re: DynaValidatorForm and BigDecimal problem It has nothing to do with Struts, the error message is saying that commons BeanUtils cannot convert the string from the form submit into a BigDecimal. Turns out that your issue is BigDecimal is not as permissive as Double when it converts a non-numeric string to a BigDecimal. If a string is not a number, Double converts it to 0.0, but BigDecimal will throw an exception, even for an empty string. Struts copies screen fields to formbean fields in RequestUtils.populate() before it does anything else including validation. So, even though there's not a value in the field (actually *because* there's no numeric value!) populate() re-throws the exception that you are seeing. To get it to work you could create and register a custom converter that will do some checking on the string before it passes it to the BigDecimal(String) constructor. You will need a class that extends org.apache.commons.beanutils.converters.BigDecimalConverter, and register your custom converter by calling ConvertUtils.register(new <your class>(), BigDecimlal.class); Or, you could instead use an alternate approach that many (me included) recommend, of having all formbean fields be Strings. You would have a String display field and a second field that is a non-string, and have this populated by your action after validation succeeds. -ed On 3/1/07, Gundersen, Richard <[EMAIL PROTECTED]> wrote: > Hi > > Has anyone had problems with BigDecimal and DynaValidatorForms? > > I've got a form with two fields (advisorFee and grossIncome) defined as > java.lang.Double. I want to change them to java.math.BigDecimal because > they are money fields. > > If I change advisorFee to BigDecimal, the validation fails when I enter > a value into grossIncome, even though this is still a Double. > > This is the error I get: > > javax.servlet.ServletException: BeanUtils.populate > > org.apache.struts.util.RequestUtils.populate(RequestUtils.java:453) > > [Caused by]... > > org.apache.commons.beanutils.ConversionException > > org.apache.commons.beanutils.converters.BigDecimalConverter.convert(BigD > ecimalConverter.java:117) > > This doesn't make any sense to me. Is it possible that it's a bug in > 1.3.5? Why should changing the definition of one field change the > behaviour of another (they are not linked in any way e.g. in the > validation rules) > > > Regards > > Richard Gundersen > Java Developer > > Email: [EMAIL PROTECTED] > Phone: 01618302398 > Fax: 01618342536 > London Scottish Bank plc > 24 Mount Street > Manchester > M2 3LS > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________ *** Disclaimer *** This electronic communication is confidential and for the exclusive use of the addressee. It may contain private and confidential information. The information, attachments and opinions contained in this E-mail are those of its author only and do not necessarily represent those of London Scottish Bank PLC or any other members of the London Scottish Group. If you are not the intended addressee, you are prohibited from any disclosure, distribution or further copying or use of this communication or the information in it or taking any action in reliance on it. If you have received this communication in error please notify the Information Security Manager at [EMAIL PROTECTED] as soon as possible and delete the message from all places in your computer where it is stored. We utilise virus scanning software but we cannot guarantee the security of electronic communications and you are advised to check any attachments for viruses. We do not accept liability for any loss resulting from any corruption or alteration of data or importation of any virus as a result of receiving this electronic communication. Replies to this E-mail may be monitored for operational or business reasons. London Scottish Bank PLC is regulated by the Financial Services Authority. ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]