2012-01-04 17 views
2

JSF変換に関する質問があります。私は、JSFは整数のためのコンバータに内蔵されていることを理解し http://laliluna.com/articles/posts/javaserver-faces-converter-tutorial.htmlJSF標準コンバータ

:このサイトから

private Integer SSN; 

:Beanをバックアップ

<p:inputText size="15" maxlength="11" value="#{user.SSN}"/> 

:私は、入力されたテキストは、次のように定義しています。

"フレームワークには、Long、Byte、Integer、Short、Character、Doubleのすべての基本タイプの標準コンバータがあります。 Float、BigDecimal、 BigIntegerとBoolean ..たとえば、コンポーネントがboolean型のプロパティに関連付けられている場合、JSFはBooleanコンバータを選択します。プリミティブ型は自動的にオブジェクトの対応するオブジェクトに変換されます。

j_idt78: '99999999999' must be a number consisting of one or more digits. 

私の理解この概念の何が問題になっている:私は上記のコードを実行するときに

しかし、私はこのエラーを得ましたか。この場合、JSFは標準コンバータを使用しないのはなぜですか?

答えて

4

数字は99999999999が大きすぎて整数として格納できないため、デフォルトでは文字列のように扱うことが肯定的です。

フィールドSSNをLongまたはBigIntegerに変更すると、正しく動作するようになります。必要に応じて明示的に直接<f:convertNumber>

http://docs.oracle.com/javaee/5/javaserverfaces/1.2/docs/tlddocs/f/convertNumber.html

+1

実際Primefacesタグの内側に次のFaceletsタグを追加することによって、このフィールドの数変換を指定することができ、 'Integer'の最大値を経由して、'によって決定することができますInteger.MAX_VALUE'は '2147483647'です。 – BalusC

+0

答えに感謝します。私は文字列としてSSNを設定することで私の問題を解決しましたが、私はこの事件についてまだ不思議です。入力値のサイズのために問題が発生したと思いますか?私はconvertNumberが少し問題があると聞いてきました。 convertNumberを選択すると、SSNもNumberとして定義する必要があります。 – lamostreta

+0

@lamostreta実際にはスーパータイプのNumberに変換できるのかどうかはわかりませんが、試してみてください。これをどうやって決めるのがあなたのデザインの選択です。個人的に私は、すべてのManagedBeanの状態データを、カスタムのコンバーターを作成したStringまたはデータオブジェクトとして保存することを選択しました。私は通常、ビジネスロジックレイヤーを呼び出す前に、ManagedBeanのStringからPrimitiveデータ型への変換をすべて行います。 –