前提・実現したいこと
SpringBootで簡易的なTodoリスト作成アプリを制作しております。
Todoの名前を空文字で入力するのを防ぐために、
バリデーションを実装し、入力フォームでエラーメッセージを表示させたいのですが、
正常に表示されません。。
皆様の知見をお借りできればと思っております。
発生している問題
空文字入力が行われた場合、Controllerでの条件分岐で
エラーメッセージを表示させ、returnで同様のメッセージ付きページを返したいのですが、
ページがリロードされるだけで、エラーメッセージが表示されません
現時点では、空文字入力でもDBに登録はされないので、バリデーション自体は機能しているとは思うのですが、
エラーメッセージの受け渡しがうまくいってないものと考えています。。
該当のソースコード
TodoForm
1package com.teamlab.engineering.todo.Form; 2 3import javax.validation.constraints.NotBlank; 4 5public class TodoForm { 6 7 @NotBlank(message = "ToDo名を入力してください") 8 String notBlanktitle; 9 10 public String getNotBlanktitle() { 11 return notBlanktitle; 12 } 13 14 public void setNotBlanktitle(String notBlanktitle) { 15 this.notBlanktitle = notBlanktitle; 16 } 17}
Controller
1package com.teamlab.engineering.todo.controller; 2 3import com.teamlab.engineering.todo.Form.TodoForm; 4import com.teamlab.engineering.todo.model.Todo; 5import com.teamlab.engineering.todo.service.TodoService; 6import org.springframework.stereotype.Controller; 7import org.springframework.ui.Model; 8import org.springframework.validation.BindingResult; 9import org.springframework.validation.annotation.Validated; 10import org.springframework.web.bind.annotation.*; 11 12import java.util.List; 13 14@Controller 15public class TodoController { 16 17 private final TodoService todoService; 18 19 public TodoController(TodoService todoService) { 20 this.todoService = todoService; 21 } 22 23 @GetMapping("/") 24 public String index(Model model) { 25 List<Todo> todolist = todoService.findAll(); 26 model.addAttribute("list", todolist); 27 return "index"; 28 } 29 30 @PostMapping("/register") 31 public String register( 32 @Validated TodoForm todoForm, BindingResult error, @ModelAttribute Todo todo) { 33 if (error.hasErrors()) { 34 return "redirect:/"; 35 } 36 todoService.save(todo); 37 return "redirect:/"; 38 }
index
1 <div class="left_box"> 2 <p>新しい ToDoを作成する</p> 3 <form th:method="post" th:action="@{/register}" class="new-todo"> 4 <div class="todo-name"> 5 ToDo名<input type="text" name="title" size="50" maxlength="20" class="text-input"> 6 <span th:if="${notBlanktitle}" th:each="error : ${notBlanktitle}" th:text="${message}">ErrorMessage</span> 7 </div> 8 <div class="todo-deadline"> 9 期限<input type="date" name="deadline" class="date-input"> 10 </div> 11 <input type="submit" value="送信する" class="todo-create"> 12 </form> 13 </div>
試したこと
条件分岐のエラーが 出た際に、
redirectだとそのままデータが返されてしまうので、
returnで、そのままページ遷移させなければならないという指摘があったので
redirectに変更したもののそのままページ遷移させてしまうだけでした
おそらくhtml側にメッセージが渡せていないので、
コントローラ側で addAttributeを使用してメッセージを渡す必要があるのかと思ったのですが
当てる変数が分からず。。
thymeleafの使い方もまだ曖昧なので、html周りが原因ではないかと考えております。。
補足情報
今週からSpringを使い始めたため、
まだまだ知識不足な部分が多いのですが、もし原因となりそうか箇所
がありましたら、ご教授頂ければ幸いです。。
何卒よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/09 02:02