저번장에서는 게시판 댓글 목록기능을 구현했습니다.

이번장에서는 댓글 작성 기능을 구현해보도록 하겠습니다.

댓글 작성은 해당 게시물 조회로 들어가서 작성합니다.

 

1. 댓글 작성 쿼리 작성

 

<!-- replyMapper.xml -->

<!-- 댓글 작성 -->
<insert id="writeReply">
   	insert into reply(board_number, replytext, replyer)
  	values( #{board_number}, #{replytext}, #{replyer})
</insert>

 

이 쿼리에서는 댓글을 작성하는데 reply_number 컬럼이 없는걸 볼 수 있는데요?

이유는 테이블을 작성할 때

reply_number int NOT NULL AUTO_INCREMENT,

 

다음과 같이 자동증가를 해도록 처리했기 떄문입니다.(mysql만 oracle은 시퀀스로!)

 

2. 댓글 DAO 작성

 

<!-- replyDAO -->
package kr.co.web.persistence;

import java.util.List;

import kr.co.web.domain.Criteria;
import kr.co.web.domain.ReplyVO;

public interface ReplyDAO {
	
	public void create(ReplyVO vo) throws Exception;
    
	public List<ReplyVO> readReply(int board_number) throws Exception;
}

 

<!-- ReplyDAOImpl -->

package kr.co.web.persistence;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import kr.co.web.domain.Criteria;
import kr.co.web.domain.ReplyVO;

@Repository
public class ReplyDAOImpl implements ReplyDAO{

	@Inject
	SqlSession session;
	
	private static final String NS = "replyMapper";
	private static final String CREATE = NS + ".writeReply";
	private static final String READ = NS + ".readReply";
	
	@Override
	public void create(ReplyVO vo) throws Exception {
		session.insert(CREATE, vo);
	}
	
	@Override
	public List<ReplyVO> readReply(int board_number) throws Exception {
		return session.selectList(READ, board_number);
	}
}

 

 

3. 댓글 SERVICE 작성

 

<!-- replyService -->

package kr.co.web.service;

import java.util.List;

import kr.co.web.domain.Criteria;
import kr.co.web.domain.ReplyVO;

public interface ReplyService {

	public void register(ReplyVO vo) throws Exception;

	public List<ReplyVO> readReply(int board_number) throws Exception;

}

 

<!-- replyServiceImpl -->

package kr.co.web.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import kr.co.web.domain.Criteria;
import kr.co.web.domain.ReplyVO;
import kr.co.web.persistence.ReplyDAO;

@Service
public class ReplyServiceImpl implements ReplyService{
	
	@Inject
	ReplyDAO replyDAO;
	
	@Override
	public void register(ReplyVO vo) throws Exception {
		replyDAO.create(vo);	
	}
	
	@Override
	public List<ReplyVO> readReply(int board_number) throws Exception {
		return replyDAO.readReply(board_number);
	}

}

 

 

4. BoardController 댓글 작성 메서드 추가

 

<!-- boardController -->

@RequestMapping(value = "/replyWrite", method = RequestMethod.POST)
public String replyWrite(ReplyVO vo, Criteria cri, RedirectAttributes ra) throws Exception {
	logger.info("reply write");
		
	replyService.register(vo);
		
	ra.addAttribute("board_number", vo.getBoard_number());
	ra.addAttribute("page", cri.getPage());
	ra.addAttribute("perPageNum", cri.getPerPageNum());
		
	System.out.println("댓글번호 : " + vo.getReply_number());
	return "redirect:/board/readView";
}

 

파라미터로 ReplyVO, Criteria, RedirectAttributes를 넣어주었는데요.

ReplyVO는 댓글 작성하기 위한 데이터,

Criteria는 readView에 있던 page, perPageNum 값을 받아오기 위한 것이며,

RedirectAttributes는 리다이렉트 했을 때 값들을 가지고 이동합니다.

그래서 Criteria의 값을 넣어서 댓글을 저장 한 뒤 원래 페이지인 readView로 이동하게 됩니다.

 

5. 댓글 작성 readView.jsp 작성

 

<form name="replyForm" method="post">
	<input type="hidden" id="board_number" name="board_number" value="${BoardVO.board_number}" />
    <input type="hidden" id="page" name="page" value="${cri.page}"> 
	<input type="hidden" id="perPageNum" name="perPageNum" value="${cri.perPageNum}"> 
	<input type="hidden" id="searchType" name="searchType" value="${cri.searchType}"> 
	<input type="hidden" id="keyword" name="keyword" value="${cri.keyword}"> 
		
	<div>
		  <label for="replyer">댓글 작성자</label><input type="text" id="replyer" name="replyer" />
		   <br/>
		  <label for="replytext">댓글 내용</label><input type="text" id="replytext" name="replytext" />
	</div>
    
	<div>
		  <button type="button" class="replyWriteBtn">작성</button>
	</div>
</form>

 

 

6. readView.jsp script 작성

 

$(function () {
	createReply();
})
		
function createReply() {
	$(".replyWriteBtn").on("click", function() {
		var formObj = $("form[name='replyForm']");
		formObj.attr("action", "/board/replyWrite");
		formObj.submit();
	});
}

 

작성 버튼을 누르면 값들이 controller의 replyWrite 메서드로 전달됩니다.

 

7. 댓글 작성 테스트

 

 

+ Recent posts