- 게시판에서 로그인 한 사용자가 이전에 봤던 글이 있다면 해당 되는 글을 옅게 표시하는 기능을 추가하여 본 글과 보지 않은 글을 구분할 수 있도록 구현해보았습니다.
- 기능 구현은 각 게시글 객체마다 해당 게시글을 방문한 사용자에 대한 리스트를 저장하고 이후 현재 접속한 사용자와 리스트에 저장된 사용자를 비교하는 방식으로 구현하였습니다.
📝 Board
- 우선 Board 엔티티에 해당 게시글을 본 사용자 리스트를 저장하기 위해 새로운 변수를 추가해주었습니다.
package com.cos.blog.model;
...
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Board {
...
private String seen;
...
}
📝 BoardService
- 사용자가 글 상세보기를 할 경우 해당 게시글의 seen 변수를 업데이트 할 수 있도록 BoardService의 detail() 함수에 아래와 같은 코드를 추가해주었습니다.
@Transactional
public Board detail(Long id, HttpServletRequest request, HttpServletResponse response, Long principal_id) {
...
if(board.getSeen() == null) {
board.setSeen("[" + principal_id.toString() + "]");
} else {
board.setSeen(board.getSeen() + "[" + principal_id.toString() + "]");
}
...
}
- 여기서 굳이 특수문자를 함께 사용해준 이유는 1과 10, 11, 101 등과 같이 숫자가 중복되는 수를 [1][10][11][101]과 같이 해당 특수문자로 구분하기 위해서입니다.
📝 index.jsp
- View 단의 코드는 아래와 같이 작성해주었습니다.
<c:forEach var="board" items="${boards.content}">
<c:set var="user" value="[${Integer.toString(principal.user.id)}]" />
<tbody style="<c:if test='${fn:contains(board.seen, user)}'>color: gray;</c:if>">
<tr onclick="location.href='/board/${board.id}/?page=${param.page}&sort=${param.sort}&searchType=${param.searchType}&searchKeyword=${param.searchKeyword}&sortType=${param.sortType}'" style="cursor: pointer;">
<th>${board.id}</th>
<th>${board.title}<c:if test="${fn:length(board.replys) > 0}">
<span style="color: red;">[${fn:length(board.replys)}]</span>
</c:if>
</th>
<th>${board.user.nickname}</th>
<th>${board.createDate}</th>
<th>${board.count}</th>
<th>${board.recommendCount}</th>
</tr>
</tbody>
</c:forEach>
📝 Result
'🚗 Backend Toy Project > 스프링 부트 게시판' 카테고리의 다른 글
[스프링부트 게시판] 34. 사용자 프로필 이미지 추가 (0) | 2022.09.27 |
---|---|
[스프링부트 게시판] 33. 댓글 알림 기능 (1) | 2022.09.23 |
[스프링부트 게시판] 31. 이전글, 다음글 구현 (0) | 2022.09.06 |
[스프링부트 게시판] 30. 게시판 정렬 기능 구현 (0) | 2022.09.03 |
[스프링부트 게시판] 29. 추천 기능 구현 (1) | 2022.09.01 |