I am sure my BigDecimal translator is no problem, I have fixed this problem
by modify the Tapestry ioc's source code. ok, here is my translator.


   1. package com.javaeye.dengyin2000.gtts.tapestry;
   2.
   3. import java.math.BigDecimal;
   4.
   5. import org.apache.tapestry.Translator;
   6. import org.apache.tapestry.ValidationException;
   7. import org.apache.tapestry.ioc.Messages;
   8. import org.apache.tapestry.ioc.internal.util.InternalUtils;
   9.
   10. public class BigDecimalTranslator implements
    Translator<BigDecimal> {
   11.
   12.     public
    BigDecimal parseClient(String clientValue, Messages messages)
   13.             throws ValidationException {
   14.         if (InternalUtils.isBlank(clientValue))
   15.             return null;
   16.
   17.         try
   18.         {
   19.             return new BigDecimal(clientValue.trim());
   20.         }
   21.         catch (NumberFormatException ex)
   22.         {
   23.             throw new ValidationException(messages.format(
   "number-format-exception", clientValue));
   24.         }
   25.     }
   26.
   27.     public String toClient(BigDecimal value) {
   28.         return value == null ? "" : value.toString();
   29.     }
   30.
   31. }

and in AppModule.java


   1. public static void contributeTranslatorDefaultSource(
   2.         MappedConfiguration<Class, Translator> configuration)
   3. {
   4.     configuration.add(BigDecimal.class, new
    BigDecimalTranslator());
   5. }
   6.
   7. public static void contributeTranslatorSource(
   8.         MappedConfiguration<String, Translator> configuration)
   9. {
   10.     configuration.add("bigdecimal",  new
    BigDecimalTranslator());
   11. }

It's a real bug in tapestry ioc 5.0.5.


   1.
   // String to BigDecimal is important, as String->Double->BigDecimal
would lose

   2. // precision.
   3.
   4. add(configuration, String.class, BigDecimal.class, new
    Coercion<String, BigDecimal>()
   5. {
   6.     public BigDecimal coerce(String input)
   7.     {
   8.         return new BigDecimal(input);
   9.     }
   10.

So I modify code to :


   1.
   // String to BigDecimal is important, as String->Double->BigDecimal
would lose

   2. // precision.
   3.
   4. add(configuration, String.class, BigDecimal.class, new
    Coercion<String, BigDecimal>()
   5. {
   6.     public BigDecimal coerce(String input)
   7.     {
   8.             if (input == null || input.trim().length() == 0)
   9.                 return null;
   10.             return new BigDecimal(input);
   11.     }
   12. });


And the problem has gone.




On 8/27/07, Nick Westgate <[EMAIL PROTECTED]> wrote:
>
> Please show the code for your translator.
>
> Cheers,
> Nick.
>
>
> Denny wrote:
> > I have contribute a BigDecimal translator, Yes, I know it's a T5 bug and
> it
> > would be fix in version 5.0.6. I searched tapestry mailling list, but I
> > haven't gotten the answer. Does anybody know how to fix it? do your guys
> > don't meet this problem. Or I should modify the T5.0.5' source code?
> >
> > Thanks.
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


-- 
Regards

Denny
Site: http://dengyin2000.javaeye.com

Reply via email to