Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Greedy
- Proxy
- Thymeleaf
- SpringBoot
- 알고리즘
- java
- Exception
- kotlin
- QueryDSL
- Spring Boot
- 스프링
- JPQL
- Android
- transaction
- db
- 인프런
- 김영한
- 자바
- Servlet
- 그리디
- jpa
- 스프링 핵심 원리
- pointcut
- spring
- 스프링 핵심 기능
- JDBC
- 백준
- springdatajpa
- AOP
- http
Archives
- Today
- Total
개발자되기 프로젝트
댓글 기능 추가 본문
1. post.html
글 상세 페이지 하단에 댓글을 위한 table을 추가하자.
댓글 입력은 간단하게 form으로 구성했다.
댓글을 보여주는 창은.. 음 .. 일단은 table로 구현했는데.. 댓글 수정, 삭제를 위해선 다른 방식이 필요하다
<form action="post.html" th:action="@{/comments/new}" th:object="${comment}" method="post">
<div class="form-group">
<label for="content" class="form-label">내용</label>
<input type="text" class="form-control" th:field="*{content}" name="content" id="content" placeholder="댓글을 입력">
</div>
<button type="submit" class="btn btn-primary" >Submit</button>
</form>
2. CommentController
- Comment 저장 url은 "/new/{postId} 로 지정했다.
- 그 이유는 댓글은 어떤 게시글에 작성되었는지 저장이 필요하다.
- PathVariable로 게시글 ID를 받아 연관계 매핑 후 저장한다.
- Member정보도 마찬가지로 연관관계 설정이 필요하다. 이 때 Member정보는 로그인 정보를 가져온다.
- 댓글 저장 후 원래 게시글로 redirect
@Controller
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/comments")
public class CommentController {
private final CommentService commentService;
private final SessionManager sessionManager;
private final MemberService memberService;
private final PostService postService;
@PostMapping("/new/{postId}")
public String addComment(@PathVariable("postId") Long postId, @ModelAttribute("comment")CommentDto commentDto, HttpServletRequest request, RedirectAttributes redirectAttributes){
MemberDto memberDto = (MemberDto) sessionManager.getSession(request);
Member member = memberService.findMemberById(memberDto.getId());
Post post = postService.findPostById(postId);
Comment comment = dtoToComment(commentDto);
comment.setMember(member);
comment.setPost(post);
commentService.saveComment(comment);
redirectAttributes.addAttribute("postId", postId);
return "redirect:/posts/{postId}";
}
public Comment dtoToComment(CommentDto commentDto){
return new Comment(commentDto.getContent());
}
}
2. PostController
- CommentController에서 comment저장 후 Post상세 페이지를 호출한다
- postId와 로그인 세션 정보를 가지고 Model에 view로 넘길 data 추가
- comment를 별도로 생성해서 넘기는 이유는 th:object활용 위함.
@GetMapping("/{postId}")
public String post(@PathVariable("postId") Long id, Model model, HttpServletRequest request){
MemberDto memberDto = (MemberDto) sessionManager.getSession(request);
Post post = postService.findPostById(id);
PostDto postDto = postToDto(post);
List<Comment> comments = post.getComments();
List<CommentDto> commentDtos = comments.stream()
.map(comment -> new CommentDto(comment.getId(), comment.getContent(), memberDto, postDto.getId())).collect(Collectors.toList());
model.addAttribute("member", memberDto);
model.addAttribute("post", postDto);
model.addAttribute("comments", commentDtos);
model.addAttribute("comment", new CommentDto());
return "post/post";
}
3. 결과
- 입력은 잘 되는데....
- 내용이 전달이 안된다.
- view에서 Server로 comment의 content가 전달이 안된다...ㅜ ㅜ
4. GitHub : 211005 Comment
'Project > 블로그 게시판 만들기' 카테고리의 다른 글
현재까지 진행 상황 (0) | 2021.10.06 |
---|---|
댓글기능 오류 수정, @ModelAttribute 실패 (0) | 2021.10.06 |
글 삭제하기 (0) | 2021.10.05 |
home 버튼 추가 (0) | 2021.10.05 |
로그아웃 (0) | 2021.10.05 |
Comments