Spring MVC 4.1 No. 020 Validatorのエラーの際に入力値を再表示させる
前回のソースを少し変更して、フォームの値の再表示をします。
まずはControllerです。
package com.example.spring.controller.c020; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/c020") public class C020Controller { @RequestMapping("/bookForm") public String bookForm(Model model) { model.addAttribute("c020Model", new C020Model()); return "c020/bookForm"; } @RequestMapping(value = "/bookRecv", method = RequestMethod.POST) public String bookRecv(@Validated @ModelAttribute C020Model c020Model, BindingResult errors) { if (errors.hasErrors()) { return "c020/bookForm"; } return "c020/bookRecv"; } }
<form:input>タグを使ってpathにエラーメッセージと同じようにモデル名.フィールド名を指定することで、リクエストから自動的に値が割り当てられます。
<%@page contentType="text/html; charset=utf-8" %><%-- --%><!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> </head> <body> <form action="bookRecv" method="post"> 書名: <form:input path="c020Model.name" size="20" /><form:errors path="c020Model.name" /><br> 価格: <form:input path="c020Model.price" size="20" /><form:errors path="c020Model.price" /><form:errors path="c020Model.validPrice" /><br> 定価: <form:input path="c020Model.listPrice" size="20" /><form:errors path="c020Model.listPrice" /><br> <input type="submit" value="送信"> </form> </body> </html>
bookRecv.jspとC020Modelは同様のため省略します。
ソースは https://github.com/kuwalab/spring-mvc41 にあります。タグ020が今回のサンプルです。
まとめ http://kuwalab.hatenablog.jp/entry/spring
最初 http://kuwalab.hatenablog.jp/entry/spring_mvc41/001
前回 http://kuwalab.hatenablog.jp/entry/spring_mvc41/019
次回 http://kuwalab.hatenablog.jp/entry/spring_mvc41/021