그런데 여기서 생기는 의문 ❓❓❓ 그래도 list를 표시하거나 할 때는 그냥 board 라는 Entity를 사용하는게 좋은가?? ❓❓❓ 잘 모르겠어서. 일단 그냥 둠 .
```html
@GetMapping("/list")
public String list(Model model){
List<Board> boards = boardRepository.findAll();
model.addAttribute("boards",boards);
return "board/list";
}
```
- Controller를 수정 : @ModelAttribute 사용하던 것을 —> ***@Valid와 BindingResult를 사용하는 것으로 변경 → BindingResult를 보고, 값을 체크***해 주면 된다. —> BoardForm에 설정해 놓은 @NotNull이나 @Size를 만족하지 않으면 BindingResult에 그러한 것이 저장되어있음
- 기존
```java
// form 내용을 저장
@PostMapping("/new-postform")
public String savePost(@ModelAttribute BoardForm boardForm){
Board board = new Board();
if(boardForm.getContent()!=null){
board.setId(boardForm.getId());
}
board.setTitle(boardForm.getTitle());
board.setContent(boardForm.getContent());
boardRepository.save(board);
System.out.println(board);
return "redirect:/board/list";
}
```
- @Valid BoardForm boardForm 만 쓴 거는, @Valid @ModelAttribute("boardForm") BoardForm boardForm 이 생략된 것임.
- 변경 : Error가 있으면
- PostForm object marked with @Valid —> form 에 채워진 attributes를 gather
- BindingResult object —> validation errors에 대해 테스트 해보고 결과를 얻을 수 있다.
- form 으로부터 , PostForm object에 bound되어있는 모든 attributes들을 받아올 수 있다.
- 보통 사용자가 @Valid 제약조건을 위반하는 title을 입력한다면, 에러메시지를 표시하면서, 이 페이지로 다시 돌아와야 한다.
- 따라서 error에 직면한다면, user에게 다시 원래의 form template를 보내준다.
- ❓❓❓ ❓❓❓ 어떻게 작성하던 내용이 담긴 form page가 뜨는 걸까?
```java
<form action="#" th:action="@{/board/new-postform}" th:object="${boardForm}" method="post" >
```
- 이 부분의 영향인 것 같다.
- Spring MVC 의 model에 key값이 "boardForm"인 객체에 , 현재 form page에 있던 정보들이 update 된 듯 하다. 따라서, return 된 String의 view를 렌더링 할 때는, Model에 있던 boardForm이 사용되어, 쓰던 글의 내용이 보이는 것.
- 마찬가지로 현재페이지에서 F5를 해도 같다.
@PostMapping("/new-postform")
public String savePost(@Valid BoardForm boardForm, BindingResult bindingResult){
if (bindingResult.hasErrors()) {
return "/board/new-postform";
}
Board board = new Board();
if(boardForm.getContent()!=null){
board.setId(boardForm.getId());
}
board.setTitle(boardForm.getTitle());
board.setContent(boardForm.getContent());
boardRepository.save(board);
System.out.println(board);
return "redirect:/board/list";
}
```