프로젝트

가전제품 대여 웹사이트 (세숫대여) - 게시판 댓글 작성 기능 구현

sejin2 2023. 9. 29. 19:58

게시판 상세보기 하단에 댓글을 작성하는 기능을 구현해본다. 루룰

먼저, 사용자가 댓글을 입력할 수 있는 창을 띄워야 한다 !   

freeboarddetail.jsp 하단에 자유게시글 댓글 창을 만들어준다. 

<h5 class="mb-0">자유게시글 댓글</h5>
    <form id="commentform" action="freeboard-review" method="post">
        <input type="hidden" name="freeBoardNo" value="${ freeBoard.freeBoardNo }" />
            <table class="table align-items-center">
                <tr>
                    <td style="width: 800px;">
                    <textarea id="comment_content" name="replyContent" style="width: 105%; resize:none;  border-radius:80px" rows="2"></textarea>
                    </td>
                    <td style="width: 50px; vertical-align: middle;">
                    <input type="submit" class ="btn btn-sm btn-primary" id="btninsertreview" value="댓글등록하기" > 
                    </td>
                </tr>
            </table>
    </form>

그 다음 댓글 관련 DTO를 하나 생성해준다. 

FreeBoardReviewDto.java

@Data
public class FreeBoardReviewDto {
	
	private int freeBoardReplyNo;
	private int freeBoardNo;
	private String replyContent;
	private Date replyCreateDate;
	private Date replyModifiYDate;
	private int replyParents;
	private int replySequence;
	private int replyDepth;
	private String replyWriter;
	private boolean replyDelete; 
	
}

FreeBoardReviewController.java

@Controller
@RequestMapping(path = { "/freeboard" })
public class FreeBoardReviewController {
	
	@Setter(onMethod_= {@Autowired})
	private FreeBoardReviewService freeBoardReviewService;
	
	@PostMapping(path = {"/freeboard-review"})   // 자유게시글 댓글 쓰기 
	public String wrtieFreeBoardReview(FreeBoardReviewDto freeBoardReview,
                                	   @RequestParam (defaultValue="-1") int pageNo) { 
		if(pageNo < 1) {
			return "redirect:freeboardlist";
		} 
		freeBoardReviewService.WriteFreeBoardReview(freeBoardReview);  
		return String.format("redirect:freeboarddetail?freeBoardNo=%d&pageNo=%d", freeBoardReview.getFreeBoardNo(), pageNo);
	}

FreeBoardReviewService.java

void WriteFreeBoardReview(FreeBoardReviewDto freeBoardReview);

FreeBoardReviewServiceImpl.java

public class FreeBoardReviewServiceImpl implements FreeBoardReviewService{
	
	@Setter(onMethod_= {@Autowired})
	private FreeBoardReviewMapper freeboardReviewMapper;
	
	@Override   // 자유게시판 댓글 작성 
	public void WriteFreeBoardReview(FreeBoardReviewDto freeBoardReview) { 
		freeboardReviewMapper.insertFreeBoardReview(freeBoardReview);
		freeboardReviewMapper.updateReplyParents(freeBoardReview.getFreeBoardReplyNo(), freeBoardReview.getFreeBoardReplyNo());
     }

FreeBoardReviewMapper.java

@Mapper
public interface FreeBoardReviewMapper { 
	@Insert("insert into FreeBoardReview (freeBoardNo, replyContent, replyParents, replySequence, replyDepth) "
      		  + "values (#{freeBoardNo}, #{replyContent}, 0, 1, 0)")
	// 먼저 insert 하고, select 하게 하는 구문 : 자동증가된 컬럼(freeBoardReplyNo)의 값을 DTO 에 넣기
	@Options(useGeneratedKeys = true, keyProperty = "freeBoardReplyNo", keyColumn = "freeBoardReplyNo")
	
	void insertFreeBoardReview(FreeBoardReviewDto freeBoardReview);

실행 결과 입력 창이 잘 보이는 것을 확인할 수 있다. 

 댓글 작성 후 등록하기 버튼을 누르면, 

DB에도 값이 잘 들어오는 것을 확인할 수 있다 !!

 

** TODO : 댓글 수정일자 데이터를 연결하면 자꾸 오류가 나서 일단 작성일자로 값을 넣어놓았다. 그래서 아직까지는 replyCreateDate와 replyModifyDate의 일자가 동일한 것을 볼 수 있다.