댓글에 대한 댓글을 작성하는 것을 무한 댓글, 계층형 댓글, 대댓글 이라고 한다.
이 무한 댓글을 개발하기 위해서는 3가지 필드가 필요하다.
먼저, 부모를 표시하는 필드(reparent),
현재 댓글이 게시물을 기준으로 어느 정도 떨어져 있는지,
즉 사람으로 치면 이순신 장순의 몇 대손인지를 나타내는 깊이(redepth),
게시물을 기준으로 몇 번째 글인지를 나타내는 순서(reorder) 필드가 필요하다.
부모 필드(reparent)는 당연이 필요한 것으로 여겨지지만
없어도 기능적인 문제는 발생하지 않는다.
부모 댓글을 삭제 할 때 자식 댓글을 삭제하지 않으면
엉뚱한 댓글에 붙어서 나오게 된다.
자식까지 삭제하기 위해 부모 댓글 필드가 필요한 것이다.
깊이(redepth)는 트리 구조로 보여주기 위해 필요한 필드이다.
부모 댓글 보다 조금 더 들여쓰기 하여 트리처럼 보여 주게 된다.
가장 이해가 어렵고 중요한 필드는 댓글들의 순서를 의미하는 순서(reorder) 필드이다.
하나의 게시물에 2개의 댓글이 달렸다고 하면
댓글 번호(reno)와 순서(reorder)는 1, 2번 일 것이다.
이 상태에서 1번 댓글에 댓글을 달면 새로운 댓글의 댓글 번호는 3이 되지만 순서는 2가 되어야 한다.
그리고, 댓글 번호 2의 순서는 3이 되어야 한다.
그래야지만 순서대로 화면에 출력되어 보여지게 된다.
더 예를 들면,
댓글 번호 1번에 다시 댓글을 달면
새 댓글은 댓글 번호 4가 되고 순서는 2가 된다.
댓글 번호 3가 되고 순서는 3가 되고
댓글 번호 2가 되고 순서는 4가 된다.
즉, 중간에 값이 들어오기 때문에 순서가 하나씩 증가하게 되는 것이다.
새로운 댓글은
기존 댓글 번호의 최대값에 1 더한 값을 가지지만
순서는 부모 댓글의 순서 값에 1 더한 값을 가지고,
부모 댓글의 순서 값보다 큰 값들은 모두 1씩 더한 값을 가지게 된다.
개념을 이해했으면
다음 SQL문을 실행하고 BoardReplyVO에 변수 reparent(부모), redepth(깊이), reorder(순서)를 추가한다.
public class BoardReplyVO {
private String brdno;
private String reno;
private String rewriter;
private String redeleteflag;
private String rememo;
private String redate;
private String reparent;
private String redepth;
private Integer reorder;
~~ 생략 ~~
public String getReparent() {
return reparent;
}
public void setReparent(String reparent) {
this.reparent = reparent;
}
public String getRedepth() {
return redepth;
}
public void setRedepth(String redepth) {
this.redepth = redepth;
}
public Integer getReorder() {
return reorder;
}
public void setReorder(Integer reorder) {
this.reorder = reorder;
}
}
BoardReplyVO.java
다음 SQL문을 직접 실행해서 필드를 추가해 주고 (ALTER ),
기존 댓글의 데이터에 값을 넣어준다(UPDATE).
ALTER TABLE TBL_BOARDREPLY ADD(
REPARENT INT(11),
REDEPTH INT,
REORDER INT
);
UPDATE TBL_BOARDREPLY SET REPARENT=RENO, REDEPTH=0, REORDER=RENO;
'Java > 게시판 6: 무한댓글' 카테고리의 다른 글
2. 무한 댓글 리스트 (11) | 2016.05.15 |
---|---|
3. 무한 댓글 쓰기 – control (3) | 2016.05.15 |
4. 무한 댓글 쓰기 – JSP (0) | 2016.05.15 |
5. 무한 댓글 삭제 (1) | 2016.05.15 |
6. 무한 댓글 삭제 II (0) | 2016.05.15 |