Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

댓글 기능 추가 본문

Project/블로그 게시판 만들기

댓글 기능 추가

Seung__ 2021. 10. 6. 00:06

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


 

GitHub - bsh6463/blog

Contribute to bsh6463/blog development by creating an account on GitHub.

github.com

 

'Project > 블로그 게시판 만들기' 카테고리의 다른 글

현재까지 진행 상황  (0) 2021.10.06
댓글기능 오류 수정, @ModelAttribute 실패  (0) 2021.10.06
글 삭제하기  (0) 2021.10.05
home 버튼 추가  (0) 2021.10.05
로그아웃  (0) 2021.10.05
Comments