저번장에서는 게시판 댓글 목록기능을 구현했습니다.
이번장에서는 댓글 작성 기능을 구현해보도록 하겠습니다.
댓글 작성은 해당 게시물 조회로 들어가서 작성합니다.
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. 댓글 작성 테스트
'JAVA > blog' 카테고리의 다른 글
회원 (1) - 가입 기능 (0) | 2020.07.31 |
---|---|
댓글 구현(3) - 게시판 댓글 수정, 삭제 (0) | 2020.07.29 |
댓글 구현(1) - 게시판 댓글 목록 구현 (0) | 2020.07.27 |
검색(3) (0) | 2020.07.24 |
jQuery .val() - form의 값을 가져거나 값을 설정하는 메서드 (0) | 2020.07.23 |