validationを使うために、pom.xmlで定義する
pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency>
MyData.java
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.validation.constraints.Min; import javax.validation.constraints.Max; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.NotEmpty; @Entity @Table(name="mydata") public class MyData{ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column @NotNull private long id; @Column(length = 50, nullable = false) @NotEmpty private String name; @Column(length = 200, nullable = true) @Email private String mail; @Column(nullable = true) @Min(0) @Max(200) private Integer age; //省略
Controller
import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; @RequestMapping(value="/", method=RequestMethod.GET) public ModelAndView index( @ModelAttribute("formModel") MyData mydata, ModelAndView mav) { mav.setViewName("index"); mav.addObject("msg","this is sample content."); mav.addObject("formModel",mydata); Iterable<MyData> list = repository.findAll(); mav.addObject("datalist", list); return mav; } @RequestMapping(value="/", method= RequestMethod.POST) @Transactional(readOnly=false) public ModelAndView form( @ModelAttribute("formModel") @Validated MyData mydata, BindingResult result, ModelAndView mov) { ModelAndView res = null; if(!result.hasErrors()) { repository.saveAndFlush(mydata); res = new ModelAndView("redirect:/"); } else { mov.setViewName("index"); mov.addObject("msg","sorry, error is occured..."); Iterable<MyData> list = repository.findAll(); mov.addObject("datalist",list); res = mov; } return res; }
html
<ul> <li th:each="error : ${#fields.detailedErrors()}" class="err" th:text="${error.message}"> </ul>
うおおおおおお、凄え
html
<table> <form method="post" action="/" th:object="${formModel}"> <tr> <td><label for="name">名前</label></td> <td><input type="text" name="name" th:value="*{name}" th:errorclass="err"> <div th:if="${#fields.hasErrors('name')}" th:errors="*{name}" th:errorclass="err"> </div> </td> </tr> <tr> <td><label for="age">年齢</label></td> <td><input type="text" name="age" th:value="*{age}" th:errorclass="err"> <div th:if="${#fields.hasErrors('age')}" th:errors="*{age}" th:errorclass="err"> </div></td> </tr> <tr> <td><label for="mail">メール</label></td> <td><input type="text" name="mail" th:value="*{mail}" th:errorclass="err"> <div th:if="${#fields.hasErrors('mail')}" th:errors="*{mail}" th:errorclass="err"> </div></td> </tr> <tr> <td><label for="memo">メモ</label></td> <td><textarea name="memo" th:text="*{memo}" cols="20" rows="5"></textarea></td> </tr> <tr> <td></td> <td><input type="submit"/></td> </tr> </form> </table>
こうもできる