RNO댓글번호
BNO본문글번호>>보드참조중 (FK) 종속삭제 본문ㄷ글지워지면 자동삭제
REPLYER멤버테이블의아이디>>멤버테이블의 아이디 (FK) 종속삭제 회원삭제되믄자동삭제
REPLYTEXT댓글!내용
REGDATE등록날짜
UPDATEDATE 수정날짜
댓글은페이징을 하지는 않음
페이징을 하긴 할건데 댓글은 순서대로 놔야한다.
최신글이 위로 올라오는게아니라 순서대로 해야함... (게시판글이랑 다름)
그럼 문제가 페이징을 하고 순서대로할경우
작성자가 댓글쓰면 맨 뒷페이지로 넘겨야한다.
댓글에 댓글을 쓰게하려면? 넘버링을 따로해야한다.
넘버링을 depts별로하는거임
R000 000 0000 이렇게 자릿수를 만들어서 넘버링을 해야한다.
본문 대댓글1 대댓글2
게시글을 쓸때 첨부파일을 같이 등록해야하는데 첨부파일은 게시글의 bno 를 참조하기떄문에
insert에 떄려박지말고 bno를 getvalue로 따로 매서드 하고, insert로 게시글과 첨부파일에 각각 할당해줘야함
데이터베이스에는 데이터에대한 선점이라는 개념이있ㅇ므. (교착상태방지를 위한)
셀렉트문 끝에다가 for update를 붙이면 셀렉트하는 순간 다른애들이 셀렉트를 못함 내가 ㅅ커밋한 당므에 사람들이 조회가 가능함.
은행가서 번호표뽑는것도 선점임
리스트 나오게하는 화면 만들어볼거임
일단 핸들러필요
핸들러만들기전에 프로퍼티 반드시
classpath << 톰캣이 클래스를 배포하고있는 부분부터! 라는 의미고 위의 그림이 그 위치임
필터는
아파치에서 발행하는 setdo 인코딩 필터가 있음
[Java/JSP] tomcat post/get 방식 한글깨짐 UTF-8 Encoding 문제 해결방법
[web.xml 파일에 filter 추가] 1) 스프링 프레임워크인 경우 Set Character Encoding org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 Set Character Encoding /* 2) 스프링이 아닌경우 S..
limeeyojung.tistory.com
*필터는
로그인을 해야만 할수있는 기능일떄도 필터를 쓸수있따.
.do로 오는것만 로그인 체크하면 될듯
서블릿이 받는것처럼 .do를 받아서
암튼 한글인코딩은 무조건 해야하는거니까
url 패턴을 /*로 한거임
로긴 거르는방법
이닛파람에 제외히켜야하는 키워드 담고..?
핸들러만들자
저거가지고 크리테리아 만들거임
package com.jquery.handler;
import java.sql.SQLException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jquery.command.SearchCriteria;
import com.jquery.service.ReplyService;
import com.jquery.service.ReplyServiceImpl;
import com.jquery.utils.JsonResolver;
public class BoardReplyListHandler implements CommandHandler {
//리스트 갖다줄 리플라이서비스
private ReplyService replyService = new ReplyServiceImpl();
public void setReplyService(ReplyService replyService) {
this.replyService = replyService;
}
@Override
public boolean isRedirect(HttpServletRequest request) {
return false;
}
/**
* 요청한 내용을 실제 처리하는 메서드
*/
@Override
public String process(HttpServletRequest request, HttpServletResponse response) throws Exception {
//1입력처리
//뭐들어와야 리스트던질수있음? bno랑 criteria를 줘야함 서치크리테리아는 만들어야하고,
int bno = Integer.parseInt(request.getParameter("bno"));
int page = Integer.parseInt(request.getParameter("page"));
SearchCriteria cri = new SearchCriteria();
cri.setPage(page);
cri.setPerPageNum(10);
//2처리
try {
Map<String,Object> dataMap = replyService.getReplyList(bno,cri);
//3결과 / 출력
JsonResolver.view(response, dataMap);
}catch(SQLException e) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
e.printStackTrace();
throw e;
}
return null;
}
}
제대로 나오는가 확인해보자
리스트에 댓글 개수를 표현할수있음
댓글이니까 테이블을 쓸 필요가 없음
detail.html
데이터 넣어서 뿌려야하므로 ajax
겟페이지라는 펑션인데
커먼스에 프린트 데이터(어디에다가 붙일지 주면됨. 어펜드림)랑 프린트페이징 있음
그럼 데이터만 확실히 나오게하면되고 어디에붙일지만 확실하게하면됨
페이지번호 유지를 위해서 replyPage는 임의로 만든거임
리플라이도 페이징을 햇으니 화면유지를 해야함. 쿠키를 만들긴할건데 임시로 1번줌
detail.html
});
</script>
<!-- reply꺼 -->
<script type="text/x-handlebars-template" id="reply-list-template" >
{{#each .}}
<div class="replyLi" >
<i class="fas fa-comments bg-yellow"></i>
<div class="timeline-item" >
<span class="time">
<i class="fa fa-clock"></i>{{prettifyDate regdate}}
<a class="btn btn-primary btn-xs" id="modifyReplyBtn" data-rno={{rno}}
data-replyer={{replyer}} data-toggle="modal" data-target="#modifyModal">Modify</a>
</span>
<h3 class="timeline-header"><strong style="display:none;">{{rno}}</strong>{{replyer}}</h3>
<div class="timeline-body" id="{{rno}}-replytext">{{replytext}} </div>
</div>
</div>
{{/each}}
</script>
<script>
var replyPage=1;
getPage("/board/replies/list.do?bno="+bno+"&page="+replyPage);
//replyList
function getPage(pageInfo){
$.getJSON(pageInfo, function(data){
printData(data.replyList,$('#repliesDiv'),$('#reply-list-template'),'.replyLi');
printPaging(data.pageMaker,$('.pagination'));
});
}
</script>
</body>
페이지 유지 전에 페이지 이동이 되어야할거임
페이지 이동 >searchgo임
댓글은 서치가없어서 페이지 번호를 세팅하면 그걸로 충분한데
페이지번호를 눌러서 이동하는거는
a태그로 되어있기떄문에
a태그의 기본 이벤트를 없애야하고
리플라이페이지번호로 할당을하고
겟페이지 요청함
셋페이지파람은 커먼스에 있음
일단 페이지유지말고 이동만 해보자
누른거에대한 페이지번호를 줘야함
페이지네이션할떄
이미 이렇게되어있기떄문에 파라미터로 page 받아ㅓㅅ
본문리스트를 만들댸, 본문리스트에 쿠키를 초기화하기위해 메뉴를 누를떄마다 초기화하기위해서 메뉴에 이닛파라미터를넣었었음
쿠키를 초기화하는건 커먼js안에
이 함수를 보드리스트를 뿌려주는 대상. 상위꼐층 즉 메뉴를 누를때 호출되도록 했었음
리플라이도 마찬가지임
이닛페이지파람을 하지않으면 3번페이지에서 보고있던 리플라이의 상태가 다른 디테일(다른 상세글)을 눌렀을떄도 똑같이 발행되는거임
그래서 그 리스트가 나오게 하는 상위계층에다가 이닛을 먹여야 함
카테고리를 바꾸거나 항목을 바꿀때 이닛페이지파람을 반드시 줘야함
리플라이가 나오는건 상세페이지고 , 상세페이지여는건 목록에 제목줄 누룰떄임
그니까 제목줄 누를때 이닛파라미터 실행하게 해둬야함
네목줄에 자바스크립트 a 태그에
이것만 하면 안됨
이닛페이지파람을 동시에 해야한단 말임
저 리스트 뿌려주는 템플릿은 lsit.htm에 있으므로 열자
쿠키를 발행하기시작했으면 그 쿠키에 대한 초기화를 신경써줘야함
이걸 해줘야 다른 상세글 볼떄마다 초기화된댓글 페이지가 열림
변수는 생성-초기화-변경-삭제 가 되는데,
삭제가 없다면, 지우지 않을거라면, 꼭 생각해야할게,
다시 이걸 쓸때 초기화 후 변경를 생각해야함
그래야 변경-초기화-변경-초기화의 사이클을 돈다.
왜 이걸 해야함? 그래야 기준ㅇ이 잡히기떄문
그래야 내가 변경할때 어떻게 변경해야하는지에 대한 기준이 생긴다
ㄱ아까는 무조건 1번인데 이제는 아까봤던페이지로 바뀔것
근데 댓글 2번페이지 보다가 닫고 목록새고하면 목록의 2번페이지가 열림
어케ㅇ해야할까?
같은 쿠키를 써서 그렇다.
그래서 page쿠키 이름을 reply_page로 빠꿀거임
가져올때 바꾸고
넣을떄도 그렇게 넣어야함
그럼 문제가 , 이닛페이지파람스가 일반화되지않는거임
그래서 이름줄때 프리픽스를 더해줘야함
지울때도
프리픽스가 있으면 붙여서 지워주고
없으면 언디파인뜨니까 프리픽스 없이 지워야함
이렇게 해야 일반화가 됨
그러먼 list html 의ㅈ 제목줄의 탬플릿에