SpringBoot + JPA + Thymeleaf로 간단한 CRUD를 만드는 ③~Validation 추가~
19179 단어 Thymeleaf자바spring-bootspring
내용
지난번 계속
절차
1. entity에 유효성 검사 설정 추가
Player.java
편집 src/main/java/com/example/baseball/domain/Player.java
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotEmpty // ①
private String name;
@NotNull // ②
@Min(value = 0) // ③
@Max(value = 150)
private Integer age;
@Size(max = 20) // ④
private String team;
private String position;
@NotEmpty
를 붙이면 null와 공문자를 허용하지 않게 된다@NotNull
를 붙이면 null을 허용하지 않게 된다.@Min
최대값은 @Max
로 설정한다 @Size
를 붙인다 2. 컨트롤러에 오류 제어 추가
PlayerController.java
수정 src/main/java/com/example/baseball/controller/PlayerController.java
@GetMapping("new")
public String newPlayer(Model model) {
// ①
Player player = new Player();
model.addAttribute("player", player);
return "players/new";
}
@PostMapping
public String create(@Valid @ModelAttribute Player player, BindingResult bindingResult) { // ②
if(bindingResult.hasErrors()) return "players/new"; // ③
playerService.save(player);
return "redirect:/players";
}
@PutMapping("{id}")
public String update(@PathVariable Long id, @Valid @ModelAttribute Player player, BindingResult bindingResult) {
if(bindingResult.hasErrors()) return "players/edit";
player.setId(id);
playerService.save(player);
return "redirect:/players";
}
②:
player
에 @Valid
를 붙임으로써 validation 체크 대상이 된다@Valid
는 player
@Valid @ModelAttribute Player player
// ↑と↓は同じ
@Valid
@ModelAttribute
Player player
BindingResult bindingResult
안에 에러 정보가 설정된다 bindingResult.hasErrors()
3. template에 오류 메시지 추가
new.html
src/main/resources/templates/players/new.html
<!-- ① -->
<form th:action="@{/players}" th:method="post" th:object="${player}">
<!-- ② -->
<div class="form-group" th:classappend="${#fields.hasErrors('name')}? has-error">
<label class="control-label">名前</label>
<input class="form-control" type="text" th:field="*{name}" />
<!-- ③ -->
<span class="text-danger" th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></span>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('age')}? has-error">
<label class="control-label">年齢</label>
<input class="form-control" type="number" th:field="*{age}" />
<span class="text-danger" th:if="${#fields.hasErrors('age')}" th:errors="*{age}"></span>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('team')}? has-error">
<label class="control-label">チーム名</label>
<input class="form-control" type="text" th:field="*{team}" />
<span class="text-danger" th:if="${#fields.hasErrors('team')}" th:errors="*{team}"></span>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('position')}? has-error">
<label class="control-label">守備位置</label>
<input class="form-control" type="text" th:field="*{position}" />
<span class="text-danger" th:if="${#fields.hasErrors('position')}" th:errors="*{position}"></span>
</div>
<button class="btn btn-default" type="submit">作成</button>
</form>
th:classappend="${#fields.hasErrors('name')}? has-error"
의 의미는 #fields.hasErrors('name')
가 true일 때 class 속성에 has-error를 추가한다는 것#fields
안에 오류 정보가 들어 있습니다 th:errors="*{name}"
는 *{name}
에 대해 설정된 모든 오류 메시지를 표시합니다.edit.html
src/main/resources/templates/players/edit.html
<form th:action="@{/players/{id}(id=*{id})}" th:method="put" th:object="${player}">
<div class="form-group" th:classappend="${#fields.hasErrors('name')}? has-error">
<label class="control-label">名前</label>
<input class="form-control" type="text" th:field="*{name}" />
<span class="text-danger" th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></span>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('age')}? has-error">
<label class="control-label">年齢</label>
<input class="form-control" type="number" th:field="*{age}" />
<span class="text-danger" th:if="${#fields.hasErrors('age')}" th:errors="*{age}"></span>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('team')}? has-error">
<label class="control-label">チーム名</label>
<input class="form-control" type="text" th:field="*{team}" />
<span class="text-danger" th:if="${#fields.hasErrors('team')}" th:errors="*{team}"></span>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('position')}? has-error">
<label class="control-label">守備位置</label>
<input class="form-control" type="text" th:field="*{position}" />
<span class="text-danger" th:if="${#fields.hasErrors('position')}" th:errors="*{position}"></span>
</div>
<button class="btn btn-default" type="submit">更新</button>
</form>
동작 확인
다음 번
Reference
이 문제에 관하여(SpringBoot + JPA + Thymeleaf로 간단한 CRUD를 만드는 ③~Validation 추가~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ozaki25/items/49fb8c876c93611e228d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)