クエリ文字列パラメーターを Spring コマンド Bean に渡す必要があります。次の回避策を試しました。
<c:if test="${not empty param.id}">
<form:input path="id"/>
</c:if>
驚いたことに、クエリ文字列で指定された値 ( のようなものhttp://localhost:8080/xxx/aaa.htm?id=100
) が、対応するコマンド Bean に自動的に設定されます。それはまさに私が達成したいことですが、なぜこれが起こるのか完全にわかりません。
パラメータをコマンド Bean の対応するプロパティに自動的に設定する理由と方法は?
コマンド Bean では、このパラメータは type のプロパティにマップされますjava.lang.Long
。Long
したがって、このパラメーターを のような値として表されない値に変更するxxx
と、適切な例外がスローされると予想されますが、スローされません。
Long
値ではない文字列 ( など)を渡そうとすると、xxx
HTTP ステータス 400、
クライアントから送信された要求が構文的に正しくありませんでした。
私はこの行動にかなり自信がありません。なぜこれが起こるのですか?
として表されていない URL でユーザーがこのパラメーターを変更したときにLong
、適切なユーザー フレンドリーなエラー メッセージを表示したいと考えています。そのために、いくつかのカスタム プロパティ エディターを登録しました (それらはそのまま機能します) が、Spring がプロパティ ファイルから適切なエラー メッセージを表示するには、適切な例外が発生し、それが Spring によって消費され、適切なエラーが発生する必要があります。プロパティファイルからのメッセージが表示されます。
Spring フレームワーク 3.2.0 を使用しています。
編集:
質問の 2 番目のセクションの問題 (HTTP ステータス 400 の問題) は解決されました。必要なSpringコントローラクラスのHTTPリクエストにマッピングされたメソッドでパラメータを受け取っていなかったので、BindingResult
GET
@RequestMapping(method={RequestMethod.GET}, value={"admin_side/Country"})
private String showForm(@ModelAttribute("countryBean") CountryBean command, BindingResult errors, Map model)
{
//...
}
以前はBindingResult errors
パラメーターが欠落していたため、エラーを報告できませんでした。期待どおりに動作するようになりました。
最初のセクションと同じように、まだよくわからない質問が残っています。このクエリ文字列パラメーターid
が Spring コマンド Bean に (自動的に) バインドされる理由と方法は? 教えてください。