[Spring Boot 게시판] 10일차

김정현·2022년 10월 9일
0

SPRINGBOOT게시판

목록 보기
9/36

1. 게시물 리스트에 작성자 닉네임 표시

1) ArticleRepository.xml

	<select id="getArticles" resultType="Article">
		SELECT A.* , M.nickname AS extra__writer 
		FROM article AS A
		INNER JOIN `member` AS M
		ON A.memberId = M.id
		ORDER BY A.id DESC
	</select>
  • INNER JOIN을 사용해 게시물에 저장되있는 회원번호로 회원에대한 정보중 nickname를 가져옴

2) list.jsp

        <tbody>
            <c:forEach var="article" items="${articles}">
              <tr>
                <td>${article.id } </td>
                <td>${article.regDate.substring(0,10)}</td>
                <td><a class="hover:underline" href="../article/detail?id=${article.id}">${article.title}</a></td>
                <td>${article.extra__writer}</td>
              </tr>
  • ${article.extra__writer} : 작성자의 nickname을 보여줌

2. 게시물 상세보기에 작성자 닉네임 표시

1) ArticleRepository.xml

	<select id="getArticle" resultType="Article">
		SELECT A.* , M.nickname AS extra__writer 
		FROM article AS A
		INNER JOIN `member` AS M
		ON A.memberId = M.id
		WHERE id = #{id}
	</select>
  • INNER JOIN을 사용해 게시물에 저장되있는 회원번호로 회원에대한 정보중 nickname를 가져옴

2) list.jsp

          <tr>
          	<td>내용</td><td>${article.body }</td>						
          </tr>
          <tr>
         	 <td>작성자</td><td>${article.extra__writer }</td>						
          </tr>
  • ${article.extra__writer} : 작성자의 nickname을 보여줌

3. 게시물 상세페이제에서 수정,삭제 버튼 추가

1) detail.jsp

        <div class= "btns">
            <button class ="btn-text-link" type="button" onclick="history.back()">뒤로가기</button>
            <a class ="btn-text-link" href="modify?id=${article.id }">수정</a>				
            <a class ="btn-text-link" onclick="if(confirm('삭제하시겠습니까?') == false) return false;" href="doDelete?id=${article.id }">삭제</a>								
		</div>
  • 클릭시 해당 게시물의 아이디를 바탕으로 수정,삭제 페이지로 이동
  • onclick="if(confirm('삭제하시겠습니까?') == false) return false; 삭제하기전 확인메세지를 화면에 보여줌

4. 출력용getForPrint 게시물을 가져올때, actor가 해당 게시물을 수정삭제 할 수 있는지 미리 파악하고 버튼 노출 제한

1) ArticleController (detail)

        @RequestMapping("/usr/article/detail")
        public String showDetail(HttpSession httpSession,Model model ,int id) {
            int loginedMemberId= -1;
            if(httpSession.getAttribute("loginedMemberId") !=null) {
                loginedMemberId =(int)httpSession.getAttribute("loginedMemberId");
            }
            Article article = articleService.getForPrintArticle(loginedMemberId,id);
            model.addAttribute("article", article);
            return "usr/article/detail";
        }
  • detail에서 getForPrintArticle()호출하고있다.
  • loginedMemberId를 구하고 getForPrintArticle()의 인자로 넣어준다.
  • 인자로 넣어주는 이유는 loginedMemberId를 통해 게시물에 권한체크 데이터를 추가하기 위함

2) ArticleService (getForPrintArticle)

        public Article getForPrintArticle(int actorId, int id) {
                Article article = articleRepository.getForPrintArticle(id);
                updateForPrintData(actorId,article);
                return article;
            }
  • articleRepository를 통해 id에 해당하는 게시물을 가져오고
  • updateForPrintData(actorId,article)는 가져온 게시물에 수정/삭제 권한 데이터를 추가 하기위한 메소드
  • 수정/삭제 권한 데이터를 추가하여 반환

3) ArticleService (updateForPrintData(actorId,article))

        private void updateForPrintData(int actorId, Article article) {
            if (article == null) {
                return;
            }
            ResultData actorCanDeleteRd = actorCanDelete(actorId,article);
            article.setExtra__actorCanDelete(actorCanDeleteRd.isSuccess());
        }
  • actorCanDelete(actorId,article)를 통해 게시물에대한 삭제 권한체크를하고 그결과를 ResultData로 반환
  • ResultData의 isSuccess()메소드는 boolean값으로 권한여부를 반환
  • article.setExtra__actorCanDelete(actorCanDeleteRd.isSuccess()) : 게시물에 대한 권한 여부데이터를 추가

4) Article

        public class Article {
            ~~생략~~
            private boolean extra__actorCanDelete;
  • Article의 필드로 extra__actorCanDelete추가 : 삭제에 대한 권한을 boolean값으로 받기 위한 필드

5) detail.jsp

        <div class= "btns">
            <button class ="btn-text-link" type="button" onclick="history.back()">뒤로가기</button>
                <a class ="btn-text-link" href="modify?id=${article.id }">수정</a>				
                <c:if test= "${article.extra__actorCanDelete}" >
                    <a class ="btn-text-link" onclick="if(confirm('삭제하시겠습니까?') == false) return false;" href="doDelete?id=${article.id }">삭제</a>								
				</c:if>			
		</div>
  • 가져온 게시물을 바탕으로 jsp파일로 브라우저에 보여주는데
  • article.extra__actorCanDelete에는 해당 게시물에대한 삭제 권한 데이터가 boolean값으로 저장되 있으므로
  • true라면 삭제버튼이 보여지게 되고 false라면 삭제버튼이 보여지지 않는다.

0개의 댓글