전체 게시글 목록에서 각 게시글 제목 옆에 총 댓글 수를 출력한다.
첫 번째 시도) 👉 실패
<td><a th:text="${post.title}" th:href="@{'/post/detail/' + ${post.id}}"></a>
<span class="badge bg-primary">
<span th:value="${#lists.size(post.comments)}"></span>
</span></td>
comments
An error happened during template parsing (template: "class path resource [templates/post/postList.html]")
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/post/postList.html]")
Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "#lists.size(post.comments)" (template: "post/postList" - line 46, col 35)
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "#lists.size(post.comments)" (template: "post/postList" - line 46, col 35)
Caused by: java.lang.IllegalArgumentException: Cannot get list size of null
Post에 PostRequestDto를 넣었는데 comments 필드가 null이다.
Post 엔티티에 comments 필드가 없기 때문에 Post 엔티티를 PostRequestDto로 바꿀 때 comments 필드는 null이다.
두 번째 시도) 👉 성공
private int comment_cnt;
post 엔티티에 댓글 수를 담는 필드를 추가했다.
@Builder
public Post(String title, String content, String author, int view, int comment_cnt){
this.title=title;
this.content=content;
this.author=author;
this.view=view;
this.comment_cnt=comment_cnt;
}
public void update(String title, String content, int view, int comment_cnt){
this.title=title;
this.content=content;
this.view=view;
this.comment_cnt=comment_cnt;
}
post 엔티티의 생성자, update 메소드에 comment_cnt를 추가한다.
-- SQL
ALTER TABLE POST ADD COLUMN COMMENT_CNT INT DEFAULT 0;
post 테이블에 필드를 추가했다.
post.update(post.getTitle(), post.getContent(), post.getView(), post.getComment_cnt() + 1);
댓글을 등록할 때 comment_cnt가 1 증가한다.
댓글을 등록하는 메소드에 추가했다.
post.update(post.getTitle(), post.getContent(), post.getView(), post.getComment_cnt() - 1);
댓글을 삭제할 때 comment_cnt가 -1 감소한다.
댓글을 삭제하는 메소드에 추가했다.
<td><a th:text="${post.title}" th:href="@{'/post/detail/' + ${post.id}}"></a>
<span class="badge bg-light">
<i class="bi bi-chat-right-dots"></i>
<a th:text="'+' + ${post.comment_cnt}"></a>
</span>
</td>
Bootstrap의 말풍선 아이콘과 댓글 수를 Bootstrap의 badge에 담았다.
다음과 같이 제목 옆에 댓글 수가 뜬다.
참고 👇
https://getbootstrap.com/docs/5.2/components/badge/#examples
https://icons.getbootstrap.com/
반응형
'Framework > Spring Boot' 카테고리의 다른 글
[Error] java.lang.IllegalStateException: Failed to load ApplicationContext (0) | 2022.07.12 |
---|---|
[Error] org.springframework.data.redis.serializer.SerializationException (0) | 2022.07.12 |
댓글 최신순 정렬 (0) | 2022.06.08 |
[Error] Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'post' available as request attribute (0) | 2022.05.24 |
DTO (0) | 2022.05.24 |