今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

form:errors タグを書いてもエラー表示しない

専門学校での授業で SpringMVC のバリデーションをやってたときのこと。

こちらのテキストを使ってる。

で、テキストのとおりにコードを入力して実行してみたけど、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 のクラス名を変更してたから動かなかったというオチだった。