67. spring으로 댓글 불러오기

hanahana·2022년 9월 16일
0

Spring 학원수강

목록 보기
27/45
post-thumbnail
  • 상세게시물 창에서 댓글을 불러온다

상세 게시물 jsp에 댓글 목록 창 삽입하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${board.boardTitle }</title>

</head>
<body>
	<header>
		<jsp:include page="../home.jsp" />
	</header>

	<table align="center" border="1" width="500">
		<tr>
			<td>제목</td>
			<td>${board.boardTitle }</td>
		</tr>
		<tr>
			<td>작성자</td>
			<td>${board.boardWirter }</td>

		</tr>
		<tr>
			<td>작성일</td>
			<td>${board.bCreateDate }</td>
		</tr>
		<tr>
			<td>내용</td>

			<td>${board.boardContents }<br> <c:if
					test="${board.boardRename ne null}">
					<img alt="본문이미지"
						src="/resources/buploadFiles/${board.boardRename }">

				</c:if>
			</td>
		</tr>

		<tr>
			<td colspan="2">
				<!--검색/일반의 경우 목록주소 --> <!-- 일반으로 상세 진입시 목록 --> <c:if
					test="${empty searchValue  }">
					<input type="button" value="수정"
						onclick="location.href='/board/modifyView.kh?boardNo=${board.boardNo}&page=${pageNow }';">
					<button type="button"
						onclick="location.href='/board/list.kh?page=${pageNow }';">목록</button>
				</c:if> <!-- 검색 으로 상세 진입시 --> <c:if test="${searchValue ne null }">
					<input type="button" value="수정"
						onclick="location.href='/board/modifyView.kh?boardNo=${board.boardNo}&searchCondition=${searchCondition }&searchValue=${searchValue}&page=${pageNow }';">
					<button type="button"
						onclick="location.href='/board/search.kh?searchCondition=${searchCondition }&searchValue=${searchValue}&page=${pageNow }';">목록</button>
				</c:if> <!-- 목록주소 태그 종료 -->

				<button type="button" onclick="remove()">삭제</button>
			</td>
		</tr>

	</table>

	<!--  댓글 목록 -->

	<form action="/board/addReply.kh" method="post">
		<input type="hidden" name="refBoardNo" value="${board.boardNo }">
		<table align="center" width="500" border="1">
			<tr>
				<td><textarea rows="3" cols="55" placeholder="내용을 작성하세요"
						name="replyContents" required="required"></textarea></td>
				<td>
					<button>등록하기</button>
				</td>
			</tr>

		</table>
	</form>

	<table align="center" width="500" border="1">

		<c:forEach items="${rList }" var="reply" varStatus="i">
			<tr>
				<td width="100">${reply.replyWirter }</td>
				<td>${reply.replyContents }</td>
				<td>${reply.rCreateDate }</td>
				<td><button type="button">수정</button> <a href="#">삭제</a>
			</tr>
		
		</c:forEach>
	</table>

	</form>

	<script>

		function remove() {
			event.preventDefault(); // 하이퍼링크 이동방지
			if (window.confirm("게시물을 삭제하시겠습니까?")) {
				location.href = '/board/remove.kh?page=${pageNow}';

			}

		}
	</script>

</body>
</html>
  • 댓글 목록부터 확인하면
    • for:each 태그를 통해 rList의 값을 받아 작성자, 작성날짜, 댓글내용을 출력하고 있는것을 확인할수있다.
    • 그렇게때문에 Controller에서 rList의 값을 반환받아야한다.
  • 여기는 상세 게시물 페이지이때문에 상세 게시물을 출력할 컨트롤러를 사용해야 댓글을 출력할수 있을것이다.
    • 그렇다면 상세게시물 Controller에서 rList를 반환받아야 한다.

상세 게시물 Controller

/**
	 * 게시물 상세보기
	 * @param mv
	 * @param boardNo
	 * @param session
	 * @return
	 */
	@RequestMapping(value="/board/detail.kh", method = RequestMethod.GET)
	public ModelAndView boardDetailView(ModelAndView mv,
			@RequestParam ("boardNo") Integer boardNo,
			@RequestParam(value="searchCondition", required=false) String searchCondition,
			@RequestParam(value="searchValue", required=false) String searchValue,
			@RequestParam(value="page", required=false) String pageNow,
			HttpSession session) {

	
		

		if(boardNo != null) {
		Board board = bService.printOneVyNo(boardNo);
//1
		List<Reply> rList= bService.PrintAllReply(boardNo);
		
		session.setAttribute("boardNo", boardNo); // 세션에 boardNo가 추가된다, 현재 가지고 있는 세션은 유지된다.
		try {
			mv.addObject("board", board);
			mv.addObject("searchCondition", searchCondition);
			mv.addObject("searchValue", searchValue);
			mv.addObject("pageNow", pageNow);
//2
			mv.addObject("rList",rList);

			mv.setViewName("/board/detail");
			
		}catch (Exception e) {
			mv.addObject("mgs",e.getMessage());
			mv.setViewName("/common/errorPage");
		}
		
		
		}
		else {
			mv.addObject("msg","게시물 선택 오류");
			mv.setViewName("/common/errorPage");
		}
		
		return mv;
	}
  1. 에서 게시물에 List를 받아오기위해 서비스 클래스와 연결하였다.
  2. 에서 받아온 List를 detail페이지로 전송하였다.
  • 일단 1에서 사용한 코드를 따라 서비스 클래스로 이동한다.

Service

@Override
	public List<Reply> PrintAllReply(Integer boardNo) {
		List<Reply> rList = bStore.selectAllReply(session,boardNo);
		return rList;
	}
  • 똑같이 session값을 전송하고, 전송받은 boardNo를 Store클래스로 전송하고있다.

Store

@Override
	public List<Reply> selectAllReply(SqlSessionTemplate session, Integer boardNo) {
		List<Reply> rList = session.selectList("BoardMapper.selecAllreply", boardNo);
		return rList;
	}
  • 해당 메퍼에게 전송값을 보내 데이터베이스와 연결한다

Mapper

<resultMap type="Reply" id="replyResultMap">
	<id property="boardNo" column="BOARD_NO" />
		<result property="replyNo" column="reply_no" />
		<result property="refBoardNo" column="ref_board" />
		<result property="replyContents" column="reply_contents" />
		<result property="replyWirter" column="reply_writer" />
		<result property="rCreateDate" column="r_create_date" />
		<result property="rUpdateDate" column="r_update_date" />
		<result property="rStatus" column="r_status" />

	</resultMap>
	
	<select id="selecAllreply" resultMap="replyResultMap">
	select * from reply_tbl where ref_board = #{boardNo} and r_status = 'Y'
	</select>
  • 새로운 Reply클래스에 값을 저장해야 하기때문에 새로운 resultMap을 만들어 select 태그와 연결한다.
  • 해당 boardNo가 맞는것만 가지고 온다.

이제 컨트롤러에서 해당 List를 jsp로 내보내고 출력한다.

profile
hello world

0개의 댓글