상세페이지 에 수정 링크 걸기
show.mustache 에 a태그로 링크를 걸어줌
class="btn btn-primary"추가해서 버튼도 만들어줬다
수정 버튼 동작 컨트롤러 만들기
ArticleController.java 에 edit() 메서드 추가
@GetMapping("/articles/{id}/edit")
public String edit(@PathVariable Long id , Model model){ //id를 매개변수로 받아오기 , 모델등록
Article articleEntity = articleRepository.findById(id).orElse(null); //DB에서 수정할 데이터 가져오기
model.addAttribute("article",articleEntity); // articleEntity를 article 로 등록
return "articles/edit";
}
수정 폼 만들기
templates > articles 에 edit.mustache 를 만든다 new.mustache 와 구조가 같으니 복붙하고 약간만 수정한다
{{>layouts/header}}
<form method="post" class="container">
<div class="mb-3">
<label class="form-label">제목</label>
<input type="text" class="form-control" name="title" value="{{article.title}}">
</div>
<div class="mb-3">
<label class="form-label">내용</label>
<textarea class="form-control" row="3" name="content"> {{article.content}}</textarea>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
<a href="/articles/{{article.id}}" class="btn btn-primary">뒤로가기</a>
</form>
{{>layouts/footer}}
서버 재시작후 글하나 작성하고 목록중 눌러서 -> 수정 버튼을 눌러보면
요렇게 제목하고 내용 다 잘 출력됨
더미데이터 만들기
서버 재시작할때마다 게시글 만들기 번거로우니 더미데이터를 넣어줬다
application.properties 에 코드 한줄 추가해주고
spring.jpa.defer-datasource-initialization=true
resource 폴더에 data.sql 하나 만들어서
INSERT INTO article(id, title, content) VALUES(2, '나나나나'. '2222')
INSERT INTO article(id, title, content) VALUES(1, '다다다다'. '3333')
SQL 구문으로 더미데이터를 넣어준다
서버를 재시작 해고 /articles 로 접속해보면 정상적으로 더미 데이터가 들어가있다
수정 페이지 변경하기
폼태그에 액션 속성 추가하고
hidden 속성으로 id 값을 보내주는 태그를 바로 밑에 추가해준다
update()메서드 만들기
일단 ArticleForm 에서 id 도 받기 때문에 dto > ArticleForm 에 id 필드를 추가해준다
return 값에 null 로 넣어둔값도 id 로 변경해준다
return new Article(id,title,content);
}
ArticleCotroller.java 에 update() 메서드를 작성한다
public String update(ArticleForm form){
log.info(form.toString());
return "";
}
테스트를 위해 log 코드를 작성해서 서버를 재시작후
수정페이지에서 게시글 수정후 확인해보았다
정상적으로 수정되는것이 확인되었다
DB에 저장하고 결과 페이지로 리다이렉트
//2.엔티티를 DB로 저장하기
//3.수정 결과 페이지로 리다이렉트하기
@PostMapping("/articles/update")
public String update(ArticleForm form){
log.info(form.toString());
//1.DTO 를 엔티티로 변환하기
Article articleEntity = form.toEntity();
log.info(articleEntity.toString());
//2.엔티티를 DB로 저장하기
Article target=articleRepository.findById(articleEntity.getId()).orElse(null);
if (target!=null){
articleRepository.save(articleEntity); // 엔티티를 DB에 저장(갱신)
}
//3.수정 결과 페이지로 리다이렉트하기
return "redirect:/articles"+articleEntity.getId();
}
서버 재시작후 수정해보면 정상적으로 반영후 결과물이 표시된다
'Java' 카테고리의 다른 글
REST API 와 JSON (0) | 2023.04.30 |
---|---|
SpringBoot 공부 - CRUD ( Delete ) (0) | 2023.04.28 |
SpringBoot 공부 - 게시판 내 페이지 이동 (0) | 2023.04.27 |
SpringBoot 공부 - CRUD (Read - 2) (0) | 2023.04.26 |
SpringBoot 공부 - CRUD (Read - 1) (0) | 2023.04.25 |