드디어... 끝낫읍니다... 거진 한달이 걸렸네요 다 정리하는 게ㅋㅋㅋㅋㅋㅋㅋ
(ㅠㅠ) 반성중
무튼 결과뷰
게시판 글쓰기와 같이 코멘트를 달면 리스트에는 ㄴ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>
'Project > 2. My First Website <Mybatis>' 카테고리의 다른 글
project 3.5 My first website/ 게시판 내 게시글 보기 (0) | 2020.09.23 |
---|---|
project 3.4 My first website/ 게시판 게시글 조회수 조정하기(올리기) (0) | 2020.09.23 |
project 3.3 My first website/ 게시판 게시글 보기 페이지 + 글 삭제 (0) | 2020.09.22 |
project 3.2 My first website/ 게시판 글쓰기 페이지 (0) | 2020.09.14 |
project 3.1 My first website/ 게시판 리스트 (0) | 2020.09.13 |