いくつかの数値フィールドを空のままにしておきたいフォームがありますが、から「無効な値」エラーが発生し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: ""
それで、バインダーに空の数値フィールドを許可させる他の方法はありますか?