Study Web Development

3월 15일

이전으로

Spring

10. springPage

Board

Controller
  1. BoardAjaxController 클래스에 다음의 내용을 추가
import java.util.Collections;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import kr.spring.board.vo.BoardReplyVO;
  1. BoardAjaxController 클래스 하단에 다음의 메서드를 추가
	// 댓글 등록
	@RequestMapping("/board/writeReply.do")
	@ResponseBody
	public Map<String, String> writeReply(BoardReplyVO boardReplyVO, HttpSession session, HttpServletRequest request) {
		logger.info("<<댓글 등록>> : " + boardReplyVO);
		
		Map<String, String> map = new HashMap<String, String>();
		
		Integer user_num = (Integer)session.getAttribute("user_num");
		if(user_num==null) { // 로그인되어 있지 않은 경우
			map.put("result", "logout");
		}
		else { // 로그인되어 있는 경우
			// 회원 번호 등록
			boardReplyVO.setMem_num(user_num);
			// 아이피 세팅
			boardReplyVO.setRe_ip(request.getRemoteAddr());
			// 댓글 등록
			boardService.insertReply(boardReplyVO);
			
			map.put("result", "success");
		}
		
		return map;
	}
	
	// 댓글 목록
	@RequestMapping("/board/listReply.do")
	@ResponseBody
	public Map<String, Object> getList(@RequestParam(value="pageNum", defaultValue="1") int currentPage, 
			@RequestParam int board_num,
			HttpSession session) {
		logger.info("<<목록 호출>> currentPage : " + currentPage);
		logger.info("<<목록 호출>> board_num : " + board_num);
		
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("board_num", board_num);
		
		// 총 댓글 수
		int count = boardService.selectRowCountReply(map);
		
		// 페이지 처리
		int rowCount = 10;
		PagingUtil page = new PagingUtil(currentPage, count, rowCount, 10, null);
		map.put("start", page.getStartCount());
		map.put("end", page.getEndCount());
		
		List<BoardReplyVO> list = null;
		if(count>0) {
			list = boardService.selectListReply(map);
		}
		else {
			list = Collections.emptyList();
		}
		
		Map<String, Object> mapJson = new HashMap<String, Object>();
		mapJson.put("count", count);
		mapJson.put("rowCount", rowCount);
		mapJson.put("list", list);
		mapJson.put("user_num", (Integer)session.getAttribute("user_num"));
		
		return mapJson;
	}

	// 댓글 수정
	@RequestMapping("/board/updateReply.do")
	@ResponseBody
	public Map<String, String> modifyReply(BoardReplyVO boardReplyVO, HttpSession session, HttpServletRequest request) {
		logger.info("<<댓글 수정>> : " + boardReplyVO);
		
		Map<String, String> map = new HashMap<String, String>();
		
		Integer user_num = (Integer)session.getAttribute("user_num");
		BoardReplyVO db_reply = boardService.selectReply(boardReplyVO.getRe_num());
		if(user_num==null) { // 로그인되어 있지 않은 경우
			map.put("result", "logout");
		}
		else if(user_num!=null && user_num==db_reply.getMem_num()) { // 로그인한 회원 번호와 댓글 작성자 회원 번호가 일치하는 경우
			// 아이피 세팅
			boardReplyVO.setRe_ip(request.getRemoteAddr());
			// 댓글 수정
			boardService.updateReply(boardReplyVO);
			
			map.put("result", "success");
		}
		else { // 로그인한 회원 번호와 댓글 작성자 회원 번호가 불일치하는 경우
			map.put("result", "wrongAccess");
		}
		
		return map;
	}

	// 댓글 삭제
	@RequestMapping("/board/deleteReply.do")
	@ResponseBody
	public Map<String, String> deleteReply(@RequestParam int re_num, HttpSession session) {
		Map<String, String> map = new HashMap<String, String>();
		
		Integer user_num = (Integer)session.getAttribute("user_num");
		BoardReplyVO db_reply = boardService.selectReply(re_num);
		if(user_num==null) { // 로그인되어 있지 않은 경우
			map.put("result", "logout");
		}
		else if(user_num!=null && user_num==db_reply.getMem_num()) { // 로그인한 회원 번호와 댓글 작성자 회원 번호가 일치하는 경우
			boardService.deleteReply(re_num);
			
			map.put("result", "success");
		}
		else { // 로그인한 회원 번호와 댓글 작성자 회원 번호가 불일치하는 경우
			map.put("result", "wrongAccess");
		}
		
		return map;
	}
DAO
  1. BoardMapper.xml<mapper> 태그 사이에 다음의 내용을 추가
	<!-- 댓글 목록 -->
	<select id="selectListReply" parameterType="map" resultType="boardReplyVO">
		SELECT
			*
		FROM (SELECT
					a.*,
					ROWNUM AS rnum
				FROM (SELECT
						re_num,
						<![CDATA[
						REPLACE(REPLACE(re_content, '<', '&lt;'), '>', '&gt;') AS re_content,
						]]>
						re_date,
						re_mdate,
						board_num,
						mem_num,
						id
					FROM spboard_reply
					JOIN spmember USING (mem_num)
					WHERE board_num=#{board_num}
					ORDER BY re_num DESC) a)
		<![CDATA[
		WHERE rnum>=#{start} AND rnum<=#{end}
		]]>
	</select>

다음으로