Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Jakarta-commons Wiki" for change notification.
The following page has been changed by SimonKitching:
http://wiki.apache.org/jakarta-commons/BeanUtils/FAQ
------------------------------------------------------------------------------
If you want BeanUtils to do implicit String->Date conversions for you, then you just
need to register a suitable converter for the date
formats you expect to encounter in your input.
+ === How can I correctly convert locale-specific input? ===
+
+ If your code is directly calling conversion-related methods on ConvertUtils/ConvertUtilsBean
to do data conversion, then you can simply
+ change to using LocaleBeanUtils/LocaleBeanUtilsBean/LocaleConvertUtils/LocaleConvertUtilsBean
instead. The Locale-aware classes will
+ automatically detect the locale of the host machine and set up appropriate converters for
that locale. Alternatively you can explicitly
+ create LocaleConvertUtilsBean instances providing a particular locale.
+
+ If your code is calling the property-related methods on BeanUtils/BeanUtilsBean methods,
and you want the automatic type conversion
+ facilities used to be locale-aware then you might want to look at using the equivalent methods
on the LocaleBeanUtils or LocaleBeanUtilsBean
+ classes. However because the property-related methods on these classes are not used nearly
as often as the property methods on the standard
+ (non-locale-aware) classes, they may not be as well debugged and some features may be missing.
+
+ A safer alternative to either of the above is to register custom locale-aware converters
with ConvertUtils or ConvertUtilsBean:
+ {{{
+ LongLocaleConverter longLocaleConverter = new LongLocaleConverter(Locale.GERMAN);
+ ConvertUtils.register(longLocaleConverter, Long.class);
+ // now any call to any method on the BeanUtils or ConvertUtils classes which involves
+ // converting a string to a Long object will use a LongLocaleConverter which is customised
+ // to handle the German locale.
+ }}}
+
+ Of course the above will modify the default behaviour across the entire current application
(or the current webapp if the code is
+ running in a container environment; see the javadoc for method BeanUtils.getInstance for
more information).
+
+ If you do not like the idea of changing the ConvertUtils/BeanUtils behaviour so widely,
then of course you can always
+ create a BeanUtilsBean instance and customise only the behaviour of that instance:
+ {{{
+ ConvertUtilsBean convertUtilsBean = new ConvertUtilsBean();
+ // here, customise the convertUtilsBean as required by registering custom converters
+
+ PropertyUtilsBean propertyUtilsBean = new propertyUtilsBean();
+ BeanUtilsBean beanUtilsBean = new BeanUtilsBean(convertUtilsBean, propertyUtilsBean);
+
+ // now methods on the beanUtilsBean object will use the custom converters registered
+ // on the associated ConvertUtilsBean instance.
+ }}}
+
+ === How can I customise the conversion? ===
+
+ If you don't like the default way beanutils converts strings to various datatypes, then
simply register a custom converter.
+
+ So for example if you would like whitespace to be ignored when converting strings to numeric
values, then create your own
+ converter classes and register them with ConvertUtils for the datatypes you want to be affected.
Note that in this case
+ it would be easier to write a generic "filter" class that wraps the existing converters
rather than create new converters
+ classes:
+
+ {{{
+ private static class WhiteSpaceConverterFilter implements Converter {
+ Converter delegate;
+
+ public WhiteSpaceConverterFilter(Converter delegate) {
+ this.delegate = delegate;
+ }
+
+ public Object convert(Class clazz, Object value) {
+ if (value instanceof String) {
+ return delegate.convert(clazz, value.toString().trim());
+ } else {
+ return delegate.convert(clazz, value);
+ }
+ }
+ }
+
+ ConvertUtils.register(new WhiteSpaceConverterFilter(new IntegerConverter()), Integer.TYPE);
+ ConvertUtils.register(new WhiteSpaceConverterFilter(new IntegerConverter(), Integer.class);
+ ConvertUtils.register(new WhiteSpaceConverterFilter(new LongConverter()), Long.TYPE);
+ ConvertUtils.register(new WhiteSpaceConverterFilter(new LongConverter()), Long.class);
+ ....
+ }}}
+
+ One particular case of customising conversion is to make the conversion locale-aware. See
the
+ FAQ entry titled "How can I correctly convert locale-specific input?" for specific information
+ about this.
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org
|