JSP

 

 

 

 

 

 

 

                               num             ref                       re_step             re_level
                            게시물번호        게시물 그룹            그굽내에서의 순번        답변단계


kim                안녕1            1                1                    1                    0

lee                Re:안녕            4                1                    2                   1

choi               Re:Re:안녕    5               1                   3                    2

park            Re: 안녕        2                1                    4                    1
hong              Re:Re:안녕     3                1                    5                    2

num         writer             subject            ref                re_step         re_level

2            park            반가워요        2                    1             0
1            kim                안녕            1                    1             0

5            lee                 Re:안녕         1                    2             1

3            hong             Re:안녕        1                    3             1    
4           choi                Re:안녕     1                   4             2    

정렬  => ref 순으로 내림차순 정렬

re_step은 같은 그룹내에서의 순번이다.

핵심

1. 정렬 방법 ref 순으로 내림차순 정렬 후 re_step 으로 오름차순 정렬

2. 답변버튼 클릭시 num 인덱스의 ref (그룹번호를 ) 와 re_level 을 가져온다.

  select ref , re_step ,re_level  from board where num=4 


3. 핵심 - 데이터를 삽입전 re_step의 순서를 정하기 위해 
 
 선 증가  스텝이 3인것의 답변은 4
 
 가져온 데이터의 re_step +1, re_level + 1 을 해서 큰값은
   
   DB를 
   다음과 같이 그룹이 같고 모두 1씩 증가 킨다.
 
     update board set re_step=re_step+1  where ref=? and  re_step > re_step + 1
    또는
    update board set re_step=re_step+1  where ref=? and  re_step >= re_step

4. 데이터 삽입 ref 동일한 값의 ref 를 담고, re_level 은 1 증가 시킨다. 
    
    e_step 의 값은 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>

 

리스트 목록 테스 뷰 화면

게시판

글쓰기

번호 이름 제목 날짜 조회수 첨부파일 다운로드
10 수정3 수정3   댓글 : 3 2017-05-28 28   1
15 111 -----> Re: 111   2017-05-31 0   0
11 답변 -----> Re: 수정3 답변   2017-05-31 2   0
17 번호 11번 답변 --------> 번호 11번 답변   2017-05-31 0   0
12 답변2 --------> Re: Re: 수정3 답변   2017-05-31 3   0
16 번보12 의 답변 -----------> 번보12 의 답변   2017-05-31 0   0
13 333 -----------> Re: Re: Re: 수정3 답변   2017-05-31 0   0
14 2의 답변 -----------> 2의 답변   2017-05-31 0   0
9 websell websell   2017-05-28 8  
webshell.jsp
0
8 테스트 테스트   2017-05-28 40  
calculator_icon.svg
0
7 파일 다운로드 파일 다운로드   댓글 : 1 2017-05-28 1  
진지하게.txt
3
6 수정 수정   2017-05-27 0   0
5 kim 제목   2017-05-27 0   0
4 kim 제목   2017-05-27 0   0
3 WRITER SUBJECT   2017-05-27 0  
dfd
0
2 WRITER SUBJECT   2017-05-27 0   0
1 kim 제목   댓글 : 1 2017-05-27 0   0

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

관리는 어진 이를 좋은 자리에 앉히는 것이 좋다. 그것도 특정한 사람이 오랫동안 귀한 자리에 있는 것은 좋지 못하다. 또 백성은 노력하는 자가 부(富)하게 되고 번창하게 되어야 한다. 항상 같은 사람이 천한 자리에 있다는 것은 바람직한 정치라 할 수가 없다. -묵자

댓글 ( 4)

댓글 남기기

작성