Hi,

I've discovered a problem which can occur in the way that we handle the default locales. As thing are implemented currently, we populate our supported locales based on the list provided in the standard-faces-config.xml, plus any additional locales specified in the application's config files. This can cause problems when doing things like currency validation in cases where a default-locale has not been specified in the app.

For example, suppose you are using f:convertNumber with type set to "currency". When NumberConverter.getNumberFormat() is called, it will attempt to get the locale from the view. The view however, in cases where there is no default specified, follows the JSTL convention of giving preference to the first language match instead of looking for an exact match among the supported languages. So, if you are expecting 'en_US' or 'en_GB', 'en' from the standard-faces-config.xml will return a match, but the number formatter associated with 'en' has junk for matching currency and validation will fail. It seems to me that in cases where the application itself hasn't specified a locale, we should fall through to calling Locale.getDefault(). From a little experimenting, this appears to be how the RI works as it does not exhibit the same issue, although I am unable to look at the code to verify what its doing under the covers the runtime works as would be expected.

Anyway, a very simple solution would be to simply remove the <locale-config> section from standard-faces-config.xml. As far as I can tell, it actually doesn't seem necessary in the first place and would then leave it up to the application to specify which locales to support, which seems to me would be the proper behavior. Does anyone with more experience in this area have a different take on this? Is there something I'm missing here.
Thanks,
Mike






Reply via email to