사용자가 답글 쓰기를 누를 경우 부모글의 no(primary key)를 전달해준다.
<a href="insertBoard?no=${b.no }">답글 쓰기</a>
답글이 아닐 경우(=부모글이 없을 경우) 아래처럼 no 값이 없다.
<a href="insertBoard">게시글 등록</a>
@RequestMapping(method=RequestMethod.GET)
public void form(@RequestParam(value="no", defaultValue="0") int no, Model model) {
model.addAttribute("no",no);
}
뷰에서 쿼리스트링으로 전달해준 no를 받아오기 위해 @RequestParam 사용. 답글이 없을 경우 디폴트를 0으로 지정해서 받아온다.
답글일 경우 form에 hidden으로 부모글의 no를 실어보낸다.
<input type="hidden" name="no" value=${no }>
부모글의 no를 p_no라는 변수에 저장
부모글 vo를 p라는 변수에 저장
int p_no=b.getNo();
BoardVO p=dao.findByNo(p_no);
b_ref: 가장 조상글의 no. 답글이 아닐 경우 자기 자신의 no. 같은 글에 대한 답글들은 같은 ref를 가진다.
b_level: 답글의 층위 (새 글: 0, 답글: 1, 답글의 답글: 2, 답글의 답글의 답글: 3 …)
b_step: 출력될 순서. 자기자신보다 아래로 가야할 답글들 step이 1씩 증가한다.
no와 step의 관계 예시:
**들여쓰기는 계층을 나타내고, no는 작성 순서대로 부여된다.
no | step |
1 | 0 |
2 | 1 |
4 | 2 |
3 | 3 |
int no=dao.getNextNo(); //다음 글번호 발행
int b_level=0; //변수 선언, 초기화
int b_step=0; //변수 선언, 초기화
int b_ref=no;
if(p_no!=0) {
//답글
//b_ref는 부모글의 b_ref와 동일하게 한다
b_ref=p.getB_ref();
//b_step과 b_level은 부모글보다 1씩 증가시킨다. (아래에서 증가시킴)
b_level=p.getB_level();
b_step=p.getB_step();
//이미 달려 있는 답글들(자기자신의 step보다 큰 답글)의 b_step을 1씩 증가시킨다.
dao.increaseB_step(b_ref,b_step);
//b_step과 b_level은 부모글보다 1씩 증가시킨다.
b_level++;
b_step++;
}
b.setNo(no);
b.setB_level(b_level);
b.setB_step(b_step);
b.setB_ref(b_ref);
int re=dao.insert(b);