Update
Html
{{>layouts/header}}
{{#article}}
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">{{title}}</h5>
<h6 class="card-subtitle mb-2 text-muted">{{id}}</h6>
<p class="card-text">{{content}}</p>
<a href="/articles/new" class="card-link">new article</a>
<a href="/articles" class="card-link">list article</a>
</div>
</div>
<a href="/articles/{{id}}/edit" class="btn btn-primary">Edit</a>
<a href="/articles/{{id}}/delete" class="btn btn-danger">Delete</a>
{{/article}}
{{>layouts/footer}}
HTML
복사
8일자 show에서 buttn 2개를 추가 한다
여기는 Edit Page입니다.
{{#article}}
<form action="/articles/{{id}}/update" method="post">
<input type="hidden" name="id" value="{{id}}">
<input type="text" name="title" value="{{title}}" />
<textarea row="3" name="content">{{content}}</textarea>
<input type="submit"/>
</form>
<a href="/articles/{{id}}">1개 조회 페이지</a>
<a href="/articles">articles List</a>
{{/article}}
HTML
복사
input type=”hidden”
•
숨겨진 입력 필드는 폼 제출 시에 사용자가 변경해서는 안 되는 데이터를 함께 보낼 때 유용하게 사용된다.
Java
@GetMapping("/{id}/edit")
public String edit(@PathVariable Long id, Model model) {
Optional<Article> optionalArticle = articleRepository.findById(id);
if (!optionalArticle.isEmpty()) {
model.addAttribute("article", optionalArticle.get());
return "edit";
} else {
model.addAttribute("message", String.format("%d가 없습니다.", id));
return "error";
}
}
Java
복사
•
새로 수정할 데이터를 입력 받기
@PostMapping("/{id}/update")
public String update(@PathVariable Long id, ArticleDto articleDto, Model model) {
Article save = articleRepository.save(articleDto.toEntity());
model.addAttribute("article", save);
return String.format("redirect:/articles/%d", save.getId());
}
Java
복사
•
id를 통해 db속 데이터를 조회한 후 db 정보를 수정
•
Duplicated Entry에러가 안 나는 이유
id있는 경우
Hibernate: update article2 set content=?, title=? where id=?
id없는 경우
Hibernate: insert into article2 (content, title) values (?, ?)
Java
복사
Delete
@GetMapping("/{id}/delete")
public String edit(@PathVariable Long id) {
articleRepository.deleteById(id);
return "redirect:/articles";
}
Java
복사
deleteById를 통해서