I'd rather wrap it in a model. That way you're not limited to use it in
a Label but can pass it as a parameter
to a StringResourceModel etc. as well. For example source:
http://dev.ehour.nl/fisheye/changelog/eHour/?cs=433
Tauren Mills wrote:
Thanks for the ideas. Here is my implementation. I split it into two
classes since I may want to use the CurrencyConverter separately. In
my initial testing it works well, but I haven't tested
convertToObject(). Let me know if anyone sees any issues or has
suggested improvements:
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) {
// string to double.
try {
return getNumberFormat(locale).parse(value).doubleValue();
} catch (ParseException ex) {
throw new WicketRuntimeException("exception when trying to
parse currency value:" + ex.getMessage());
}
}
@Override
public String convertToString(Object value, Locale locale) {
// double to string
return getNumberFormat(locale).format(value);
}
}
public class CurrencyLabel extends Label {
private static final long serialVersionUID = 1L;
public CurrencyLabel(String id) {
this(id,null);
}
public CurrencyLabel(String id, IModel model) {
super(id,model);
}
public IConverter getConverter(Class type) {
return new CurrencyConverter();
}
}
Anyone can feel free to use this or add it to Wicket core.
Tauren
On 10/5/07, Eelco Hillenius <[EMAIL PROTECTED]> wrote:
Label dbl = new Label("dbllbl",""+x){
Why pass in a string? Better is to do new Label("foo", new Model(x));
@Override
protected void onComponentTagBody(final MarkupStream
markupStream, final
ComponentTag openTag)
{
Object val =
getConverter().convert(getModelObjectAsString(),
If you are merely displaying the value, you don't need to convert.
What this line above does - if you'd pass in a model that produces a
number) is convert from a number to a string (using the converter,
this is in getModelObjectAsString) and back again. You can just do
Object val = getModelObject().
Alternatives:
1) Wrap the model (decorator pattern) so that it returns the formatted value.
2) Use a custom converter like:
new Label("foo", new Model(x)) {
public IConverter getConverter(Class type) {
return new AbstractNumberConverter() {
public NumberFormat getNumberFormat(Locale locale) {
return NumberFormat.getCurrencyInstance();
}
}
}
}
Eelco
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]