私はユーザーが入力した金額を確認し、それを検証したいと考えています。私はJSFバリデーターを書いていますが、これをすべての状況で動作させるのに問題があります。ここに私のシナリオは次のとおりです。
私は別のロケールのユーザーを持っているので、私は入力の様々な方法で対処する必要があるとオプション2 & 4が見られるよう、次のNumberFormatローカリゼーションの問題
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
私の問題は、フランス語であるようにしたいですこのコードを使用して無効にすると、解析がスペースで停止します。
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(無効なグループ化)
1,234.567(あまりにも多くの小数点以下の桁(もちろんフランス語を除く)が正常に解析します)通貨の
任意の助けも
イアン
ありがとう、新しいことを学んだ。これに関する詳細はoracleのバグ・トラッカーを参照してください。http://bugs.sun.com/view_bug.do?bug_id=4510618 –
応答をいただきありがとうございます。ハード・コードではなく、最初に機能しましたが、stringValue.replace ( ''、symbols.getGroupingSeparator()) – bluesky
無効なグループ化と小数点以下の桁については、誰でも2番目の部分をお手伝いしますか? (これは別の質問になったはずです) – bluesky