본문 바로가기

Project/2. My First Website <Mybatis>

project 4.1 My first website/ 답글 달기 페이지 그리고 1차 완성

 드디어... 끝낫읍니다... 거진 한달이 걸렸네요 다 정리하는 게ㅋㅋㅋㅋㅋㅋㅋ

(ㅠㅠ) 반성중

 

 

 

무튼 결과뷰

게시판 글쓰기와 같이 코멘트를 달면 리스트에는 ㄴRe. 로 표시된다.

 

 

 

 

1. view

<script>

function fn_replyInsert(f) {

f.action='/MYHOME_P/replyInsert.board';

f.submit();

}

</script>

 

<form method="post">

<div class="replyInsert">

<p><h3>Write a Comment</h3></p>

 

Writer <input type="text" name="mId" value="${loginUser.mId}" readonly /><br/>

Title <input type="text" name="bTitle" autofocus/><br/>

</div>

<div class="replyInsertContent">

Content <br/> <textarea name="bContent" rows="5" cols="30"></textarea><br/><br/>

</div>

<div class="replyInsertBtn">

<input type="hidden" name="bNo" value="${param.bNo}" />

<input type="hidden" name="page" value="${param.page}" />

 

<button type="button" id="boardInsertNewBtn" class="btn btn-outline-dark" onclick="fn_replyInsert(this.form)" >submit</button>

<button type="reset" id="boardInsertResetBtn" class="btn btn-outline-dark">reset</button>

<button type="button" id="boardInsertListBtn" class="btn btn-outline-dark" onclick="location.href='/MYHOME_P/boardList.board'">to list</button>

</div>

 

replyInsert는 boardInsert와는 달리 따로 결과페이지 없이 그냥 성공시 목록으로 간다.

무튼 서브밋 버튼을 누르면 바로 펑션실행하게 서브밋버튼에 온클릭 걸어주고

여기서 보드 인서트랑 다른건 히든으로 두가지 정보를 받음 (게시글 번호랑 페이지) 그래야 성공시에 원글이 속해있는 페이지로 넘어갈 수가 있고, 게시글 번호를 알아야 거기에 depth를 를 하나 넣어서 게시글인지 댓글인지 구별할 수 있다.

<input type="hidden" name="bNo" value="${param.bNo}" />

<input type="hidden" name="page" value="${param.page}" />

 

 

2. Controller

 

case "/replyInsert.board" : 

boardCommand = new ReplyInsertCommand();

vf = boardCommand.excute(request, response);

break;

 

 

3. Command

 

1번에서 말했듯이 원글의 정보를 가져온다.

// the original post of the reply

BoardDto bDto = BoardDao.getInstance().selectBybNo(bNo);

 

그 원글의 정보에서 그룹오더 +1 해주고 뎁스를 +1 해준다. -> 이제 남은건 그룹오더도 +1 로해서 리플라이 그룹으로 이동해야됨. 처음부터 1로만들어버리면 원글의 정보를 가지고 올 수가 없음

rDto.setbGroup(bDto.getbGroup());

rDto.setbGroupOrd(bDto.getbGroupOrd() + 1);

rDto.setbDepth(bDto.getbDepth() + 1);

 

그래서 여기서 업데이트 해주고. 다오랑 xml에서 이에 해당하는 쿼리를 짜준다.

// +1 original bGroupOrd of original reply

BoardDao.getInstance().replyUpdatebGroupOrd(bDto);

 

 

4. Dao

 

public int replyInsert(BoardDto rDto) {

SqlSession ss = factory.openSession(false);

int result = ss.insert("mybatis.mapper.board.replyInsert", rDto);

if (result>0) {

ss.commit();

}

ss.close();

return result;

}

 

public int replyUpdatebGroupOrd(BoardDto bDto) {

SqlSession ss = factory.openSession(false);

int result = ss.update("mybatis.mapper.board.replyUpdatebGroupOrd", bDto);

if (result>0) {

ss.commit();

}

ss.close();

return result;

}

 

 

5. xml

<insert id="replyInsert" parameterType="dto.BoardDto">

INSERT

  INTO BOARD2

VALUES (BOARD2_SEQ.NEXTVAL,

#{mId},

#{bTitle},

#{bContent},

#{bIp},

0,

SYSDATE,

SYSDATE,

0,

#{bGroup},

#{bGroupOrd},

#{bDepth})  

</insert>

 

여기서 bgroup이랑 bdepth 가 0보다 크면 그룹오더를 +1해준다. 이걸 커맨드에서 다시 실행시켜주는거고.

<update id="replyUpdatebGroupOrd" parameterType="dto.BoardDto">

UPDATE BOARD2

  SET BGROUPORD = BGROUPORD + 1

WHERE BGROUP = #{bGroup} AND

      BDEPTH > 0

</update>