반응형
1. 리스트 화면에서 리스트 내용을 클릭하고 들어가면 아래와 같은 화면이 나온다.
2. 여기서 Edit를 클릭했을때의 흐름을 살펴보면 아래와 같다.
3. 코드의 흐름을 보면 아래와 같다.
// 화면에서 Edit 버튼을 눌렀을때 나오는 값이 입력된 화면이다.
@GetMapping("/articles/{id}/edit")
public String edit(@PathVariable Long id, Model model) {
// 수정할 데이터를 가져오기
Article articleEntity = articleRepository.findById(id).orElse(null);
// 모델에 데이터를 등록하기
model.addAttribute("article", articleEntity);
// 뷰페이지 edit.mustache로 값을 리턴한다.
return "articles/edit";
}
- articleEntity 가 어떤 데이터를 받아 오는지 System.out.println()으로 찍어보면 아래와 같다.
값을 확인해보면 articleEntity데이터값은 이것이다Article(id=1, title=가가가가가, content=11111) 와 같은데 이것은 id값을 기준으로 해당 id값의 데이터를 모두 SELECT 하여 가져 왔다.
4. 그리고 가져온값을 모델에 등록하고 등록된 값을 articles/edit로 리턴해준다.
// 모델에 데이터를 등록하기
model.addAttribute("article", articleEntity);
// 뷰페이지 edit.mustache로 값을 리턴한다.
return "articles/edit";
5. articles/edit의 페이지를 보면 아래와 같다.
/articles/{id}/edit에서 던진값을 아래의 id, title, content에서 받아서 화면에 뿌려준다.
- 아래와 같은 화면이 나타나게 된다. 여기서 데이터를 수정하고 제출을 클릭하면 /articles/update 메소드를 호출하고 해당 메소드로 값을 넘긴다.
6. /articles/update 메소드의 내용을 보면 아래와 같다.
0. PostMapping을 통한 데이터를 INSERT(UPDATE) 작업을 한다. ArticleForm form에서 edit에서 던진값을 받아온다.
1. DB에 저장하기 위해 받아온 form데이터를 entity로 변환한다.
2-1. 그리고 DB에서 기존 데이터를 가져오고,
2-2. 기존 데이터가 존재한다면 save를 통해 값을 갱신한다.
3. 수정된 결과 값을 return "redirect:/articles/" + articleEntity.getId(); 로 리다이렉트 한다.
- 리 다이렉트 된 URL값을 아래와 같다.
http://localhost:8080/articles/2
@PostMapping("/articles/update") //edit.mustache에서 던진 값
public String update(ArticleForm form) {
log.info(form.toString());
// 1.DTO를 엔티티로 변환한다.
Article articleEntity = form.toEntity();
log.info(articleEntity.toString());
// 2.엔티티를 DB로 저장한다.
//2-1:DB에서 기존 데이터를 가져온다.
Article target = articleRepository.findById(articleEntity.getId()).orElse(null);
//2-2:기존 데이터가 있다면!!, 값을 갱신한다.
if (target != null) {
articleRepository.save(articleEntity); //엔티티가 DB로 갱신 된다.
}
// 3.수정 결과 페이지로 리 다이렉트 한다.
return "redirect:/articles/" + articleEntity.getId();
}
여기까지 특정 폼에 데이터를 받아 해당 데이터를 갱신하고 업데이트 하는 과정을 수행 하였다.
반응형
'⭐ SpringBoot > SpringBoot + CRUD' 카테고리의 다른 글
[SELECT] Back-end 데이터를 Front-end에서 가져오는 방법 (0) | 2022.08.12 |
---|---|
[DELETE] 특정 폼의 데이터를 삭제하는 프로세스 (0) | 2022.08.09 |
[INSERT] 특정 폼으로 정의된 데이터를 INSERT하는 프로세스 (0) | 2022.08.03 |
[SELECT] Select 활용해 Model에 데이터 저장 후 Front-End 에서 사용하는 프로세스 (0) | 2022.08.02 |