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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]