1

いくつかの数値フィールドを空のままにしておきたいフォームがありますが、から「無効な値」エラーが発生しForm.bindFromRequest()ます。これは一般的な要件のようですが、何時間も検索した後、これに関するドキュメントが見つかりません。しかし、私はまだ明らかな何かを逃したことを望んでいます!

少し掘り下げてみたところ、PlayはSpringのDataBinderクラスを使用して実際のバインディングを行っていることがわかりました。このクラスは非常に洗練されており、フィールドにカスタムバインダーを設定できます。また、Springを使用している場合は@InitBinder、コントローラーにメソッドを追加するだけで、を使用して希望どおりにバインダーを設定できCustomNumberEditorます。ただし、Form許可されたフィールドを設定することを除いて、PlayFrameworkのオブジェクトはDataBinderへのアクセスを許可していないようです。したがって、バインダーは空の文字列をlongに変換しようとします。これにより、NumberFormatException:が得られます。

Failed to convert property value of type 'java.lang.String' to required type 'long' 
for property 'unitPriceExVAT'; 
nested exception is java.lang.NumberFormatException: For input string: ""

それで、バインダーに空の数値フィールドを許可させる他の方法はありますか?

4

1 に答える 1

1

Longプリミティブ型の代わりにフィールドを宣言するlongと、空の値はとして扱われnullます。

于 2013-03-06T22:09:31.530 に答える