form:errors タグを書いてもエラー表示しない
専門学校での授業で SpringMVC のバリデーションをやってたときのこと。
こちらのテキストを使ってる。
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2013/11/26
- メディア: 単行本
- この商品を含むブログ (2件) を見る
で、テキストのとおりにコードを入力して実行してみたけど、form:errors タグのところに表示されるはずのエラーメッセージを表示してくれない。
テキストでは、その後でエラーメッセージのカスタマイズなどをやってるから、これを解決しないと先に進めない。
ちなみに授業のメモは以下のサイトにまとめてある。学生が帰宅してからも参照しやすいように。
≫ SpringMVCによるWebアプリ – 2014年度SE3クラスでのWebアプリの講義内容と関連資料など
専門学校の授業中にいろいろと調べてみたけど解決できないままになったので、自分の宿題にした。
さきほど試してみたら、やっぱりエラーメッセージを表示してくれない。
ぐぐってみたら、以下のページがヒット。
≫ Spring 3 MVC - form:errors not showing the errors - Stack Overflow
ひとつの解決方法としては、 JSPに引き渡す FormModel のキーにしている文字列を、@ModelAttribute アノテーションに引数で渡すこと。
@RequestMapping(value = "/memo", method = RequestMethod.POST) public String form(@Valid @ModelAttribute("formModel") MemoFormModel fm, BindingResult result, Model model) {
もうひとつの解決方法は、JSPに引き渡す FormModel のキーを、FormModel のクラス名の先頭を小文字にした文字列に変更すること。
@RequestMapping(value = "/memo", method = RequestMethod.GET) public String memo(Model model) { model.addAttribute("title", "Sample"); model.addAttribute("message", "買い物メモです"); MemoFormModel fm = new MemoFormModel(); model.addAttribute("memoFormModel", fm); model.addAttribute("detalist", buylist); return "memo"; }
<form:form modelAttribute="memoFormModel"> <tr> <td></td> <td><form:errors path="*" element="div" /></td> </tr>
ほぼテキストのとおりにコードを書いててなぜ動かないんだー!ってなったけど、FormModel のクラス名を変更してたから動かなかったというオチだった。