───────┬──────────────────────────────────────────────────────────────────────── │ File: src/main//java/jp/ac/kobe_u/cs/itspecialist/todoapp/controller/ToDoController.java ───────┼──────────────────────────────────────────────────────────────────────── 1 │ package jp.ac.kobe_u.cs.itspecialist.todoapp.controller; 2 │ 3 │ import java.util.List; 4 │ import java.util.Objects; 5 │ 6 │ import org.springframework.beans.factory.annotation.Autowired; 7 │ import org.springframework.stereotype.Controller; 8 │ import org.springframework.ui.Model; 9 │ import org.springframework.validation.BindingResult; 10 │ import org.springframework.validation.annotation.Validated; 11 │ import org.springframework.web.bind.annotation.*; 12 │ 13 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.dto.LoginForm; 14 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.dto.ToDoForm; 15 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.entity.Member; 16 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.entity.ToDo; 17 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.service.MemberService; 18 │ import jp.ac.kobe_u.cs.itspecialist.todoapp.service.ToDoService; 19 │ 20 │ @Controller 21 │ public class ToDoController { 22 │ @Autowired 23 │ MemberService mService; 24 │ @Autowired 25 │ ToDoService tService; 26 │ 27 │ /** 28 │ * トップページ 29 │ */ 30 │ @GetMapping("/") 31 │ String showIndex(@ModelAttribute(name = "loginForm") LoginForm loginForm, Model model) { 32 │ //model.addAttribute("loginForm", loginForm); 33 │ return "index"; 34 │ } 35 │ 36 │ /** 37 │ * ログイン処理.midの存在確認をして,ユーザページにリダイレクト 38 │ */ 39 │ @PostMapping("/login") 40 │ String login(@Validated @ModelAttribute(name = "loginForm") LoginForm loginForm, BindingResult bindingResult, 41 │ Model model) { 42 │ 43 │ if (bindingResult.hasErrors()) { // バリデーション 44 │ return showIndex(loginForm, model); 45 │ } 46 │ 47 │ Member m = mService.getMember(loginForm.getMid()); // 存在チェック 48 │ return "redirect:/" + m.getMid() + "/todos"; 49 │ } 50 │ 51 │ /** 52 │ * ユーザのToDoリストのページ 53 │ */ 54 │ @GetMapping("/{mid}/todos") 55 │ String showToDoList(@PathVariable String mid, 56 │ @RequestParam(name="sort_by", required = false) String sortBy, 57 │ @RequestParam(name="order", required = false) String order, 58 │ @ModelAttribute(name = "ToDoForm") ToDoForm form, Model model) { 59 │ Member m = mService.getMember(mid); 60 │ // デフォルト値を入れておく. 61 │ sortBy = getDefault(sortBy, "seq"); 62 │ order = getDefault(order, "asc"); 63 │ 64 │ model.addAttribute("member", m); 65 │ model.addAttribute("ToDoForm", form); 66 │ List<ToDo> todos = tService.getToDoList(mid, sortBy, order); 67 │ model.addAttribute("todos", todos); 68 │ List<ToDo> dones = tService.getDoneList(mid, sortBy, order); 69 │ model.addAttribute("dones", dones); 70 │ return "list"; 71 │ } 72 │ 73 │ private String getDefault(String value, String defaultValue) { 74 │ if(value == null || Objects.equals(value.trim(), "")) { 75 │ return defaultValue; 76 │ } 77 │ return value; 78 │ } 79 │ 80 │ /** 81 │ * 全員のToDoリストのページ 82 │ */ 83 │ @GetMapping("/{mid}/todos/all") 84 │ String showAllToDoList(@PathVariable String mid, 85 │ @RequestParam(name="sort_by", required = false) String sortBy, 86 │ @RequestParam(name="order", required = false) String order, 87 │ Model model) { 88 │ Member m = mService.getMember(mid); 89 │ // デフォルト値を入れておく. 90 │ sortBy = getDefault(sortBy, "seq"); 91 │ order = getDefault(order, "asc"); 92 │ model.addAttribute("member", m); 93 │ List<ToDo> todos = tService.getToDoList(sortBy, order); 94 │ model.addAttribute("todos", todos); 95 │ List<ToDo> dones = tService.getDoneList(sortBy, order); 96 │ model.addAttribute("dones", dones); 97 │ return "alllist"; 98 │ } 99 │ 100 │ /** 101 │ * ToDoの作成.作成処理後,ユーザページへリダイレクト 102 │ */ 103 │ @PostMapping("/{mid}/todos") 104 │ String createToDo(@PathVariable String mid, @Validated @ModelAttribute(name = "ToDoForm") ToDoForm form, 105 │ BindingResult bindingResult, Model model) { 106 │ if (bindingResult.hasErrors()) { 107 │ return showToDoList(mid, "seq", "asc", form, model); 108 │ } 109 │ tService.createToDo(mid, form); 110 │ return "redirect:/" + mid + "/todos"; 111 │ } 112 │ 113 │ /** 114 │ * ToDoの完了.完了処理後,ユーザページへリダイレクト 115 │ */ 116 │ @GetMapping("/{mid}/todos/{seq}/done") 117 │ String doneToDo(@PathVariable String mid, @PathVariable Long seq, Model model) { 118 │ tService.done(mid, seq); 119 │ return "redirect:/" + mid + "/todos"; 120 │ } 121 │ } ───────┴────────────────────────────────────────────────────────────────────────