Spring MVC 패턴에서 ajax를 활용한 실시간 댓글달기 소스 :: 소림사의 홍반장!

컨트롤러 - ReCmtController

@Controller

public class ReCmtController {

      @Autowired private ReboardDao dao;

     

      @RequestMapping(value="/re/listCmt", method={RequestMethod.GET, RequestMethod.POST})

      public String listCmt(String no, ModelMap map) {

            List listCmt = dao.getListCmt(no);

            map.put("listCmt", listCmt);

            return "reboard/listCmt";

      }

     

      @RequestMapping(value="/re/createCmt", method={RequestMethod.GET, RequestMethod.POST})

      public void createCmt(ReboardDto dto, Writer writer) throws IOException {

            dao.createCmt(dto);

            writer.write("end");

      }

      @RequestMapping(value="/re/deleteCmt", method={RequestMethod.GET, RequestMethod.POST})

      public void deleteCmt(ReboardDto dto, Writer writer) throws IOException {

            dao.deleteCmt(dto);

            writer.write("end");

      }

}

 

 

View - read.jsp

<script type="text/javascript">

 

// 한줄댓글 입력 메소드

function doCreateCmt() {

      // 한줄댓글 내용이 필수이므로 검사

      if($('#cmt').val() == '') {

            alert("한줄 댓글의 내용은 필수 입력입니다.");

            $('#cmt').focus(); return;

      }

      // 버튼 중복 클릭 방지

      $('#createbt').attr('disabled', 'disabled');

      $.post('<%=cp%>/re/createCmt',

                  {cwriter:$('#cwriter').val(),

                   cmt:$('#cmt').val(),

                   no:${item.no}},

                  function(data){

                         $('#cmt').val(''); // 내용 비우기

                         // 다시 클릭이 가능하게끔

                         $('#createbt').attr("disabled", false);

                         // 입력이 완료가 됐으므로 다시 리스트 불러오기

                         cmtList();

                  });

}

// 한줄댓글 리스트 가져오는 메소드

function cmtList() {

      $('#cmtTarget').load("<%=cp%>/re/listCmt?no=${item.no}");

}

function doDeleteCmt(cno) {

      $.post('<%=cp%>/re/deleteCmt',

                  {"cno":cno, no:${item.no}}, function(data) {cmtList();});

}

$(function(){

      // id cmt인 텍스트에서 엔터를 쳤을 경우

      // 바로 데이터 입력이 되도록 작성

      $('#cmt').keyup(function(e){

            if(e.keyCode == 13) doCreateCmt();

      });

      // 처음 읽기 화면 들어왔을때 바로 리스트를 가져와서 보여줌

      cmtList();

});

</script>

  .

  .

  .

 

<body>

<div>

            <div>글쓴이 : <input type="text" id="cwriter" value="${userid }" style="width: 10%" /> 댓글 : <input type="text" id="cmt" style="width: 50%" />

            <input type="button" value="입력" id="createbt" onclick="doCreateCmt();" /></div>

      </div>

      <div id="cmtTarget"></div>

</body>

 

 

targetView - listCmt.jsp

<?xml version="1.0" encoding="UTF-8" ?>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<% String cp = request.getContextPath(); %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Insert title here</title>

</head>

<body>

<c:forEach var="item" items="${listCmt }">

<div>

      <div>

            ${item.cwriter } : ${item.cmt } [${item.cdate }]

            <input type="button" value="삭제" onclick="doDeleteCmt('${item.cno}');" />

      </div>

</div>

</c:forEach>

</body>

</html>

 

 

Model - ReboardDao.java

@Repository

public class ReboardDao {

 

      @Autowired private SqlSession mapper;

     

      public List getListCmt(String no) {

            return mapper.selectList("reboard.listCmt", no);

      }

 

      public void createCmt(ReboardDto dto) {

            mapper.insert("reboard.createCmt", dto);

      }

 

      public void deleteCmt(ReboardDto dto) {

            mapper.delete("reboard.deleteCmt", dto);

      }

}

 

 

 

 

 

 

 

다른 카테고리의 글 목록

Dev. 스프링/참고소스 및 예제 카테고리의 포스트를 톺아봅니다