現在springbootの学習を進めている最中です。
参考書に従いソースを作成し、想定どおり動くことを確認できております。
しかし、なぜそのように動くかが分かりません。
分からないことは下記に箇条書きします。
①登録ボタンを押すとデータが登録されるかと思いますが、その時の処理の流れ(@Setterや@Getterが動いているのだろうと思いますが、いまいちピンと来てない)
②list.htmlで、「<div th:each="comment : ${comments}">」の箇所がありますが、「comments」はどこからきたのか
有識者の方、もしよければご教示ください。
コントローラー
package
1 2import org.springframework.stereotype.Controller; 3import org.springframework.ui.Model; 4import org.springframework.validation.BindingResult; 5import org.springframework.validation.annotation.Validated; 6import org.springframework.web.bind.annotation.GetMapping; 7import org.springframework.web.bind.annotation.ModelAttribute; 8import org.springframework.web.bind.annotation.PostMapping; 9 10import com.example.demo.model.Comment; 11import com.example.demo.repository.CommentRepository; 12 13@Controller 14public class CommentController { 15 16 private final CommentRepository repository; 17 18 public CommentController(CommentRepository repository) 19 { 20 this.repository=repository; 21 } 22 23 @GetMapping("/") 24 public String getAllComments(@ModelAttribute Comment comment, Model model) 25 { 26 model.addAttribute("comments",repository.findAll()); 27 return "list"; 28 } 29 30 @PostMapping("/add") 31 public String addComment(@Validated @ModelAttribute Comment comment, BindingResult result, Model model) 32 { 33 model.addAttribute("comments",repository.findAll()); 34 if(result.hasErrors()) 35 { 36 return "list"; 37 } 38 repository.save(comment); 39 return "redirect:/"; 40 } 41 42}
モデル
package
1 2import javax.persistence.Entity; 3import javax.persistence.GeneratedValue; 4import javax.persistence.Id; 5import javax.validation.constraints.NotBlank; 6import javax.validation.constraints.Size; 7 8import lombok.Getter; 9import lombok.Setter; 10 11@Getter 12@Setter 13@Entity 14public class Comment { 15 @Id 16 @GeneratedValue 17 private Long id; 18 19 @NotBlank 20 @Size(max=40) 21 private String content; 22 23}
ビュー
<html xmlns:th ="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h3>一言コメント</h3> <form th:action="@{/add}" th:object="${comment}" method="post"> <label for="content">コメント</label> <input type="text" th:field="*{content}"> <button>登録</button> <br> <small style="color:red" th:errors="*{content}"></small> </form> <br> <h3>一覧</h3> <div th:each="comment : ${comments}"> <div> [[${comment.id}]] - [[${comment.content}]] </div> </div> </body> </html>
リポジトリ
package
1 2import org.springframework.data.jpa.repository.JpaRepository; 3 4import com.example.demo.model.Comment; 5 6 7public interface CommentRepository extends JpaRepository<Comment, Long>{ 8 9 10}
データローダー
package
1 2import org.springframework.boot.CommandLineRunner; 3import org.springframework.stereotype.Component; 4 5import com.example.demo.model.Comment; 6import com.example.demo.repository.CommentRepository; 7 8import lombok.RequiredArgsConstructor; 9 10@RequiredArgsConstructor 11@Component 12public class DataLoader implements CommandLineRunner 13{ 14 private final CommentRepository repository; 15 16 17 @Override 18 public void run(String... args) throws Exception 19 { 20 Comment comment= new Comment(); 21 comment.setContent("こんにちわ"); 22 repository.save(comment); 23 24 25 comment = new Comment(); 26 comment.setContent("テストコメント"); 27 repository.save(comment); 28 29 } 30 31} 32
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/10 12:22
2021/12/10 12:49