댓글목록에서 각각의 댓글들을 수정하고 삭제하는 버튼은 각각의 댓글만 가리키도록 만들어야한다
그러나 댓글의 개수가 고정적이지 않기때문에 직접 접근할 수 없다.
<div id="replies">
<div class-"reply_item">..</div>
<div class-"reply_item">..</div>
<div class-"reply_item">..</div>
...
</div>
전체 댓글 목록 중에서(각 댓글은 모두 같은 클래스명) 수정버튼을 클릭한 클래스가 몇번째 클래스 요소인지를 가져온다.
$('#replies').on('click', '.reply_item .btn_update', function(){});
$('#replies').on('click', '.reply_item .btn_update', function(){
console.log(this); // 수정 button 요소
var replyNo=$(this).prevAll('#replyNo').val();
var replyContent=$(this).prevAll('#replyContent').val();
console.log("선택된 댓글번호 : "+replyNo+", 댓글 내용 : "+replyContent);
$.ajax({
type:'get',
url:'replies/update?replyNo='+replyNo,
data:{
'replyBno':replyBno,
'replyContent':replyContent
},
success:function(result){
if(result=='success'){
alert('댓글 수정 성공!');
getAllReplies();
}
}
}); //end ajax()
}); //end replies.on()
$(선택된 노드).prevAll('선택자')
: 선택된 노드의 이전에 존재하는(같은 레벨의 요소 중 선택자 기준 상위위치) 모든 형제노드를 가져온다. nextAll도 있음
삭제는 수정과 동작이 동일함
현재 게시판은 누구나 게시글이나 댓글을 수정하고 삭제할 수 있다.
지금까지 게시판의 구조를 만들어봤으니 이제 실제 게시판처럼 관리 및 사용할 수 있도록 옷을 입혀보겠다!
HttpSession session=request.getSession();
session.setAttribute("userid", userid);
session.setMaxInactiveInterval(600);
//설정된 목표 url 가져오기
String url=(String)session.getAttribute("targetURL");
System.out.println("targetURL : "+url);
if(url!=null && !url.equals("")) {
response.sendRedirect(url);
session.removeAttribute("targetURL");
}else { //targetURL이 없는 경우
response.sendRedirect("index.jsp");
}
로그인하면 로그인 아이디로 session이 생성되고 로그아웃하면 세션삭제한다.
request.getSession().removeAttribute("userid");
targetURL이 존재할 경우 로그인하면 메인화면이 아닌 해당 url로 이동하고 생성된 targetURL 세션은 삭제한다.
<c:if test="${empty sessionScope.userid }">
<a href="login.go">로그인</a>
</c:if>
<c:if test="${not empty sessionScope.userid }">
<a href="logout.go">로그아웃</a>
</c:if>
메인화면이 아닌 특정 페이지에서 로그인창으로 이동했을 경우 로그인 성공 후 메인화면으로 이동하는게 아니라 로그인창이 떴던 이전화면으로 복귀할 수 있도록 경로를 세션으로 만든다.
HttpSession session=request.getSession();
String userid=(String)session.getAttribute("userid");
if(userid!=null && !userid.equals("")) {
String path=BOARD_URL+REGISTER+EXTENSION;
RequestDispatcher dispatcher=request.getRequestDispatcher(path);
dispatcher.forward(request, response);
}else { //userid 세션이 없음
session.setAttribute("targetURL",REGISTER+SERVER_EXTENSION);
response.sendRedirect("login.go");
}
로그인 기능을 만들었다면 게시글의 수정/삭제 역시 로그인한 아이디에 해당하는 게시글들만 사용할 수 있다.
if문으로 세션에 저장된 회원아이디와 게시글을 작성한 회원아이디가 일치할 경우에만 게시글 수정/삭제 버튼을 활성화함
<c:if test="${sessionScope.userid eq vo.userid}">
<a href="update.do?bno=${vo.bno }"><input type="button" value="글 수정"></a>
<a href="delete.do?bno=${vo.bno }"><input type="button" value="글 삭제"></a>
</c:if>
업데이트 하기 좋은 방식이 객체지향.
jsp 직접접근은 main말곤 다 막아놓아야함
댓글 수정/삭제는 좀더 생각해봐야할듯.. 왜 안될까.. 시점문제같은데ㅠ