You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Jered Myers <je...@maplewoodsoftware.com> on 2012/11/07 02:54:52 UTC
Currency Converter
I am updating my application from Wicket 1.4.18 to Wicket 6.2 and my
currency converter no longer works once I add the generics into it. I am
using the converter to allow the user to enter an amount of money. The
problem is that when something like "asdfasdf" is entered, I get an
exception like this:
java.lang.ClassCastException: java.lang.String cannot be cast to
java.lang.Number
at
org.apache.wicket.util.convert.converter.AbstractNumberConverter.convertToString(AbstractNumberConverter.java:31)
Is there a currency converter already in Wicket that I haven't seen?
Does anybody have a good example of a working converter for currency in
Wicket 6.x?
Here is my code from 1.4 that was working:
public class CurrencyConverter extends AbstractNumberConverter {
private static final long serialVersionUID = 1L;
public CurrencyConverter() {
}
@Override
public NumberFormat getNumberFormat(Locale locale) {
return NumberFormat.getCurrencyInstance(locale);
}
@Override
public Class<?> getTargetType() {
return Double.class;
}
public Object convertToObject(String value, Locale locale) {
try {
if(value.startsWith("$")) {
value = value.replace("$", "");
}
value = String.valueOf( Double.valueOf( value ) * 100 );
value = "$" + value;
return getNumberFormat(locale).parse(value).doubleValue();
} catch (ParseException ex) {
ConversionException conv = new ConversionException("'" +
value + "' is not a valid dollar amount.");
conv.setResourceKey("CurrencyConverter");
throw conv;
} catch(NumberFormatException ex){
ConversionException conv = new ConversionException("'" +
value + "' is not a valid dollar amount.");
conv.setResourceKey("CurrencyConverter");
throw conv;
}
}
@Override
public String convertToString(Object value, Locale locale) {
if( value == null )
return null;
int cents;
if( value instanceof Integer ) {
cents = (Integer) value;
return getNumberFormat(locale).format((double) cents / 100.0);
} else if( value instanceof String ) {
cents = Integer.parseInt( (String) value );
return getNumberFormat(locale).format((double) cents / 100.0);
}
return value.toString();
}
}
--
Jered Myers
Re: Currency Converter
Posted by Martin Grigorov <mg...@apache.org>.
Hi,
You don't use the generics.
I expect to see : extends AbstractNumberConverter<Double> and later
convertTo methods work with Double too.
In your #convertToString() I see no call to super.convertToString() but the
exception says that it fails at AbstractNumberConverter.java:**31 so your
override actually doesn't work.
On Wed, Nov 7, 2012 at 3:54 AM, Jered Myers <je...@maplewoodsoftware.com>wrote:
> I am updating my application from Wicket 1.4.18 to Wicket 6.2 and my
> currency converter no longer works once I add the generics into it. I am
> using the converter to allow the user to enter an amount of money. The
> problem is that when something like "asdfasdf" is entered, I get an
> exception like this:
>
> java.lang.ClassCastException: java.lang.String cannot be cast to
> java.lang.Number
> at org.apache.wicket.util.**convert.converter.**AbstractNumberConverter.**
> convertToString(**AbstractNumberConverter.java:**31)
>
> Is there a currency converter already in Wicket that I haven't seen? Does
> anybody have a good example of a working converter for currency in Wicket
> 6.x?
>
> Here is my code from 1.4 that was working:
>
> public class CurrencyConverter extends AbstractNumberConverter {
> private static final long serialVersionUID = 1L;
>
> public CurrencyConverter() {
> }
>
> @Override
> public NumberFormat getNumberFormat(Locale locale) {
> return NumberFormat.**getCurrencyInstance(locale);
> }
>
> @Override
> public Class<?> getTargetType() {
> return Double.class;
> }
>
> public Object convertToObject(String value, Locale locale) {
>
> try {
> if(value.startsWith("$")) {
> value = value.replace("$", "");
> }
> value = String.valueOf( Double.valueOf( value ) * 100 );
> value = "$" + value;
>
> return getNumberFormat(locale).parse(**value).doubleValue();
> } catch (ParseException ex) {
> ConversionException conv = new ConversionException("'" + value
> + "' is not a valid dollar amount.");
> conv.setResourceKey("**CurrencyConverter");
> throw conv;
> } catch(NumberFormatException ex){
> ConversionException conv = new ConversionException("'" + value
> + "' is not a valid dollar amount.");
> conv.setResourceKey("**CurrencyConverter");
> throw conv;
> }
> }
>
> @Override
> public String convertToString(Object value, Locale locale) {
> if( value == null )
> return null;
>
> int cents;
>
> if( value instanceof Integer ) {
> cents = (Integer) value;
> return getNumberFormat(locale).**format((double) cents /
> 100.0);
> } else if( value instanceof String ) {
> cents = Integer.parseInt( (String) value );
> return getNumberFormat(locale).**format((double) cents /
> 100.0);
>
> }
>
> return value.toString();
> }
>
> }
>
> --
> Jered Myers
>
>
--
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>