[21.10.08] 게시판 연습#4

yed·2021년 10월 8일
0

댓글 수정하기

댓글목록에서 각각의 댓글들을 수정하고 삭제하는 버튼은 각각의 댓글만 가리키도록 만들어야한다
그러나 댓글의 개수가 고정적이지 않기때문에 직접 접근할 수 없다.

<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요소 안에서 cilck된 reply_item 안의 btn_update를 찾는다.
$('#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>
  • 로그인하면 로그인버튼이 안보이고 로그아웃하면 로그아웃버튼이 안보여야함

타겟 URL

메인화면이 아닌 특정 페이지에서 로그인창으로 이동했을 경우 로그인 성공 후 메인화면으로 이동하는게 아니라 로그인창이 떴던 이전화면으로 복귀할 수 있도록 경로를 세션으로 만든다.

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");
}
  • 로그인 안된상태에서 글작성을 하고자하면 로그인 성공 후 메인페이지가 아니라 글작성 페이지로 바로 이동되어야할 때 글작성 페이지의 경로를 targetURL 세션으로 만든다.

로그인 시 게시글 수정/삭제

로그인 기능을 만들었다면 게시글의 수정/삭제 역시 로그인한 아이디에 해당하는 게시글들만 사용할 수 있다.

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말곤 다 막아놓아야함
댓글 수정/삭제는 좀더 생각해봐야할듯.. 왜 안될까.. 시점문제같은데ㅠ

profile
6개월 국비과정 기록하기

0개의 댓글