[Spring Boot] 게시판 답글

고운·2023년 5월 23일
0

Spring Boot

목록 보기
5/13
post-custom-banner

View (글 작성 버튼 누르는 화면)

사용자가 답글 쓰기를 누를 경우 부모글의 no(primary key)를 전달해준다.

<a href="insertBoard?no=${b.no }">답글 쓰기</a>

답글이 아닐 경우(=부모글이 없을 경우) 아래처럼 no 값이 없다.

<a href="insertBoard">게시글 등록</a>

Controller

@RequestMapping(method=RequestMethod.GET)
public void form(@RequestParam(value="no", defaultValue="0") int no, Model model) {
	model.addAttribute("no",no);
}

뷰에서 쿼리스트링으로 전달해준 no를 받아오기 위해 @RequestParam 사용. 답글이 없을 경우 디폴트를 0으로 지정해서 받아온다.

View (글 작성 form 화면)

답글일 경우 form에 hidden으로 부모글의 no를 실어보낸다.

<input type="hidden" name="no" value=${no }>

Controller

부모글의 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++;
}

vo 필드들 set 하고 insert

b.setNo(no);
b.setB_level(b_level);
b.setB_step(b_step);
b.setB_ref(b_ref);

int re=dao.insert(b);
profile
백엔드 개발자
post-custom-banner

0개의 댓글