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>
こうもできる