Thymeleafでバリデーションエラー発生時にエラーメッセージを出力する方法
Thymeleafでバリデーションエラー発生時にエラーメッセージを出力する方法の実装例を以下に示します。
フォームのクラスも含めています。
コントローラー
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.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @Controller public class FormController { @GetMapping("/form") public String showForm(Model model) { model.addAttribute("formData", new FormData()); return "form"; } @PostMapping("/form") public String submitForm(@Validated @ModelAttribute("formData") FormData formData, BindingResult bindingResult, Model model) { if (bindingResult.hasErrors()) { return "form"; } return "success"; } }
フォームのクラス
import javax.validation.constraints.NotEmpty; public class FormData { @NotEmpty(message = "名前を入力してください") private String name; // GetterとSetter public String getName() { return name; } public void setName(String name) { this.name = name; } }
フォームのビュー (form.html)
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>フォーム</title> </head> <body> <form th:action="@{/form}" th:object="${formData}" method="post"> <div> <label for="name">名前:</label> <input type="text" id="name" th:field="*{name}" /> <div th:if="${#fields.hasErrors('name')}" th:errors="*{name}">エラーメッセージ</div> </div> <div> <button type="submit">送信</button> </div> </form> </body> </html>
成功ページのビュー (success.html)
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>成功</title> </head> <body> <h1>フォームの送信に成功しました!</h1> </body> </html>
上記のコードでは、FormDataクラスに@NotEmptyアノテーションを付けて名前の入力を必須にしています。
FormControllerクラスでは、バリデーションエラーが発生した場合に同じフォームページを再表示し、Thymeleafテンプレートでエラーメッセージを表示します。