num ref re_step re_level
lee Re:안녕 4 1 2 1 choi Re:Re:안녕 5 1 3 2 park Re: 안녕 2 1 4 1 num writer subject ref re_step re_level 2 park 반가워요 2 1 0 5 lee Re:안녕 1 2 1 3 hong Re:안녕 1 3 1 정렬 => ref 순으로 내림차순 정렬 re_step은 같은 그룹내에서의 순번이다. 핵심 1. 정렬 방법 ref 순으로 내림차순 정렬 후 re_step 으로 오름차순 정렬 2. 답변버튼 클릭시 num 인덱스의 ref (그룹번호를 ) 와 re_level 을 가져온다. select ref , re_step ,re_level from board where num=4
4. 데이터 삽입 ref 동일한 값의 ref 를 담고, re_level 은 1 증가 시킨다. insert into board (ref, re_step, re_level,..) values( ref, (re_level +1) (re_level+1) ) ;
|
BoardController
else if(url.indexOf("reply.do")!=-1){
int num=Integer.parseInt(request.getParameter("num"));
BoardDTO dto=dao.view(num);
dto.setSubject("Re: "+dto.getSubject());
dto.setContent("===== 게시물의 내용 =====\n"+dto.getContent());
request.setAttribute("dto", dto);
String page="/board/reply.jsp";
RequestDispatcher rd=request.getRequestDispatcher(page);
rd.forward(request, response);
}
else if(url.indexOf("insertReply.do")!=-1){
Integer num =Integer.parseInt(request.getParameter("num"));
String writer =request.getParameter("writer");
String subject=request.getParameter("subject");
String content=request.getParameter("content");
String passwd=request.getParameter("passwd");
Integer ref=Integer.parseInt(request.getParameter("ref"));
Integer re_step=Integer.parseInt(request.getParameter("re_step"));
Integer re_level=Integer.parseInt(request.getParameter("re_level"));
String ip=request.getRemoteAddr(); //IP 주소
String filename="-";
Integer filesize=0;
re_step=re_step+1;
re_level=re_level+1;
BoardDTO dto =new BoardDTO();
dto.setNum(num);
dto.setWriter(writer);
dto.setSubject(subject);
dto.setContent(content);
dto.setFilename(filename);
dto.setFilesize(filesize);
dto.setIp(ip);
dto.setRef(ref);
dto.setRe_level(re_level);
dto.setRe_step(re_step);
dto.setPasswd(passwd);
//순서를 재 정의하기 위해 스텝 데이터베이스 업로드
//update board set re_step=re_step+1 where ref=? and re_step > re_step + 1
dao.replyUpdateStep(ref, re_step);
System.out.println(dto.toString());
//실질적인 현재 데이터 입력
dao.replyInsert(dto);
//리스트 항목으로 redirect
String page=request.getServletContext()+"/board_servlet/list.do";
response.sendRedirect(page);
}
dao
public void replyUpdateStep(Integer ref, Integer re_step) {
SqlSession session =null;
try{
session=MybatisManager.getInstance().openSession();
Map<String, Object> map =new HashMap<>();
map.put("ref", ref);
map.put("re_step", re_step);
session.update("board.replyUpdateStep", map);
session.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
if(session!=null)session.close();
}
}
public void replyInsert(BoardDTO dto) {
SqlSession session=null;
try{
session=MybatisManager.getInstance().openSession();
session.insert("board.replyInsert", dto);
session.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
if(session!=null)session.close();
}
}
mapper
<!-- 답변 ref_step 업데이트 -->
<update id="replyUpdateStep">
update board set re_step=re_step+1 where ref=#{ref} and re_step > #{ref}
</update>
<!-- 답변 삽입 -->
<insert id="replyInsert">
insert into board (NUM, WRITER, SUBJECT, PASSWD, REF, RE_STEP,
RE_LEVEL, CONTENT, IP, filename, filesize)
VALUES (
(select nvl(max(num)+1, 1) from board), #{writer},
#{subject}, #{passwd},
#{ref}
, #{re_step} , #{re_level}, #{content}, #{ip} ,#{filename}, #{filesize}
)
</insert>
<!-- 네임스페이스 id는 중복이 될 수 없음 -->
<select id="list" resultType="board.dto.BoardDTO">
select
num, writer, subject, reg_date, readcount , filename, filesize,
down, ref, re_step, re_level
, (select count(*) from BOARD_COMMENT where board_num=num) comment_count
from BOARD
order by ref desc ,re_step asc
</select>
reply.jsp
<h2>게시판 쓰기</h2>
<form name="form1" id="form1" method="post" action="${path}/board_servlet/insertReply.do">
<table border="1" >
<tr>
<td>이름</td>
<td><input type="text" name="writer" ></td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" name="subject" size="60" value="${dto.subject}"></td>
</tr>
<tr>
<td>본문</td>
<td><textarea rows="5" cols="100" name="content">${dto.content }</textarea></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="passwd" ></td>
</tr>
<tr>
<td colspan="2">
<input type="text" name="num" size="60" value="${dto.num}">
<input type="text" name="ref" size="60" value="${dto.ref}">
<input type="text" name="re_step" size="60" value="${dto.re_step}">
<input type="text" name="re_level" size="60" value="${dto.re_level}">
<input type="submit" value="확인" id="btnSave">
</td>
</tr>
</table>
</form>
리스트 목록 테스 뷰 화면
게시판글쓰기
|
댓글 ( 4)
댓글 남기기