У меня есть денежная сумма, введенная пользователем и требующая ее проверки. Я написал валидатор JSF, но у меня возникли проблемы с его работой при любых обстоятельствах. Вот мой сценарий:
У меня есть пользователи в разной Locales и поэтому мне нужно, чтобы справиться с различными способами ввода и хочу, чтобы следующиеПроблемы с локализацией номерной области
English
1234
1,234
1234.56
1,234.5
German & Spanish
1234
1.234
1234,56
1.234,5
French
1234
1 234
1234,56
1 234,5
Моя проблема с французами в качестве опции 2 & 4 видн как недопустимый, используя этот код, поскольку синтаксический анализ останавливается в пространстве.
public void validate(final FacesContext pContext,
final UIComponent pComponent,
final Object pValue) {
boolean isValid = true;
final Locale locale = (Locale)pComponent.getAttributes().get(USERS_LOCALE);
final Currency currency = (Currency)pComponent.getAttributes().get(CURRENCY);
final NumberFormat formatter = NumberFormat.getNumberInstance(locale);
formatter.setGroupingUsed(true);
formatter.setMinimumFractionDigits(currency.getDefaultFractionDigits());
formatter.setMaximumFractionDigits(currency.getDefaultFractionDigits());
final ParsePosition pos = new ParsePosition(0);
final String stringValue = (String)pValue;
if (pos.getIndex() != stringValue.length() || pos.getErrorIndex() != -1) {
isValid = false;
}
...
Я также хочу, чтобы убедиться, что следующий рассматривается как недействительные, но все они разобраны
1,234,9.56 (Invalid группировка)
1,234.567 (слишком много знаков после запятой (для французского языка, конечно, за исключением) за валюту)
Любая помощь будет высоко ценится
Ян
Спасибо, узнали что-то новое. Более подробно об этом можно узнать в отладчике ошибок oracle: http://bugs.sun.com/view_bug.do?bug_id=4510618 –
Спасибо за ответы, первый сделал работу, хотя вместо жесткого кода я использовал stringValue.replace ('', symbols.getGroupingSeparator()) – bluesky
Кто-нибудь поможет со второй частью относительно недопустимых группировок и десятичных знаков? (вероятно, это задало отдельный вопрос!) – bluesky