list.jsp에서 구현했던 다운로드 수 증가시키기를
view(상세보기)에서도 구현함

list에서 코드 가져와서 view에다 복붙

<tr>
    <th class="w-25 bg-dark text-white text-center">다운수</th>
    <td id="down-count">${record.downCount }</td>
</tr>
<tr>
    <th class="w-25 bg-dark text-white text-center">자료파일</th>
    <td>
        <ul class="list-unstyled">
            <c:forEach var="file" items="${fn:split(record.attachFile,',')}">
                <li><a class="down-file" href="<c:url value="DataRoom/Download.kosmo?filename=${file}$no=${record.no}"/>">${file}</a></li>
            </c:forEach>					
        </ul>				
    </td>
</tr>

==============================
<script>
window.addEventListener('load',function(){
	//다운로드 수 자바스크립트로 증가시키기
	var td = document.querySelector('#down-count');
	var downFiles = document.querySelectorAll(".down-file"); //파일이 여러 개 일수도 있으니까
	downFiles.forEach(function(file){
		file.onclick=function(e){
			var downCount=parseInt(td.innerHTML)
			td.innerHTML=downCount+1;
		};		
	});	
});
</script>

자바코드보면서 이해&t설명
1.다운로드 수 td 태그에 id="" 속성을 추가시켜서 선택자로 쉽게 가져올거임 이거 사용해서 사용자가 클릭하면 ++해서 다운로드 수( td.innerHTML )를 늘리게 할것이기 때문!!
2. 다운로드파일이 여러개 일 수도 있으니 documentAll로 노드들 가져오고
forEach문으로 요소들을 모두 꺼내온다.(이때 파일 이름만 가져와야 해서 split 함수 쓴거고 그거 쓰려면 맨 위에다가 태그립도 꼭 걸어 놔야 한다!)

[비밀번호확인처리]
수정/삭제 시 모달창을 이용하여 비밀번호를 입력하게 하고 일치하면 수정/삭제 , 일치하지 않으면 다시 view로 보내기
PasswordController 생성하고
여기에 넘길요소들은 무엇? 비밀번호랑 글번호 그리고 클릭한 것이 수정인지 삭제인지에 대한 정보를 보내야함
이 넘기는 작업은 모두 자바스크립트로 처리한다!!
우선 모달창은 받은 걸로 사용할 거라 footer 밑에다 복붙함

모달창을 띄워야 하기 때문에 수정과 삭제 버튼에 속성을 추가함
class명은 password-update-delete 로
data-target="#passwordModal"(모달창 띄우기 )
data-backdrop="static" ( 이건 모달창에 x표를 눌러야 모달창 사라지게 만듦)
동일하게 추가하고
data-toggle="modal" 가 있어야 모달창이뜨는데 이건 우선 수정에만 추가시킨다. ! 삭제버튼은 자바스크립트처리할 때 추가시킴 왜냐면 실수로 삭제버튼을 눌렀을 때를 대비해서 확인 창을 한 번 더 띄워 줄건데 거기서 취소를 누르면 모달창이 뜨지 말아야 하기 때문이다!
그래서 삭제 버튼에는 id="delete-button" 라는 속성을 추가하고 밑에 자바스크립트에서 아이디 불러와서 밑에서 처리할 것임!

 <!-- 수정/삭제/목록 컨트롤 버튼 -->
<div class="text-center">  
    <a href="#" class="btn btn-success password-update-delete" data-toggle="modal" data-target="#passwordModal" data-backdrop="static">수정</a>
    <a href="#" class="btn btn-success password-update-delete" data-target="#passwordModal" data-backdrop="static" id="delete-button">삭제</a>	
    <a href='<c:url value="/DataRoom/List.kosmo"/>' class="btn btn-success">목록</a>
</div>         

===============================================
//수정/삭제 버튼 클릭 시 이벤트 처리 (모달창 띄우기)
var mode = document.querySelector('input[name=mode]');
var buttons= document.querySelectorAll('.password-update-delete');
var delete_button= document.querySelector('#delete-button')
//console.log(buttons);
buttons.forEach(function(button){
	button.onclick=function(e){
		console.log(e.target.textContent); //수정/삭제 나온다!
		if(e.target.textContent ==='수정'){
			mode.value='UPDATE';
			document.querySelector('.modal-title').textContent='수정용 비밀번호 입력 창';
		}
		else{
			if(confirm("정말로 삭제 하시겠습니까?")){
			mode.value='DELETE';
			//data-toggle="modal" 속성 추가 그래야 모달창이 뜸
			delete_button.setAttribute("data-toggle","modal");
			document.querySelector('.modal-title').textContent='삭제용 비밀번호 입력 창';
			
			window.setTimeout(function(){
				delete_button.removeAttribute("data-toggle");
				},1000); ///사용자가 삭제버튼누르고 비밀번호입력창에서 취소했다가
                		//다시 삭제버튼을 잘못 눌러서 취소했을 때 비밀번호 입력창이 뜨지 않아야 함
			}			
		}
	};
	
});
</script>


이제 저 모달창에 띄운 비밀번호가 맞으면 그에 맞는 명령을 처리하고
맞지 않으면 다시 돌아가게 하는것을 처리해야함
역시 일처리는 controller로 해야지!!
여기선 비밀번호 맞는지 확인한 후
수정이였으면 수정하는 파일로
삭제면 삭제 처리 후 메시지 뿌려주는 페이지로 이동시킬 것 임!


@WebServlet("/DataRoom/Password.kosmo")
public class PasswordController extends HttpServlet {
	
	//오! 이건 post로 넘어오네 ! 당연하지 비밀번호는 숨겨야 하니까!
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//파라미터 받기
		String no = req.getParameter("no");
		String mode=req.getParameter("mode");
		String originlFileName=req.getParameter("originlFileName");
		String password=req.getParameter("password");
	
		//모델 호출 및 결과값 받기
		DataRoomDAO dao = new DataRoomDAO(getServletContext());
		boolean flag = dao.isCorrectPassowrd(no,password);
		dao.close();
		//뷰 선택 후 포워딩
		//비밀번호가 틀리면 이전 페이지
		if(!flag) {
			resp.setContentType("text/html; charset=UTF-8");
			PrintWriter out = resp.getWriter();
			out.println("<script>");
			out.println("alert('비밀번호 일치하지 않습니다.');");
			out.println("history.back();");
			out.println("</script>");
			return;
		}
		//비밀번호 일치
		if("UPDATE".equals(mode)) //수정을 누른 경우 -수정폼으로 이동
		req.getRequestDispatcher("DataRoom.Edit.kosmo").forward(req, resp);
		else {//삭제를 누른 경우 -삭제 처리 후 메시지 뿌려주는 페이지로 이동
			dao = new DataRoomDAO(getServletContext());
			int deleteFlag = dao.delete(no);
			dao.close();
			if(deleteFlag == 1) {
				FileUtils.deletes(originlFileName,req.getServletContext().getRealPath("/upload"));
			}
			req.setAttribute("SUCCFAIL",deleteFlag);
			//메시지 뿌려주는 페이지 이동
			req.getRequestDispatcher("/dataroom14/Message.jsp").forward(req, resp);					
		}
	}
}

어.... isCorrectPassowrd 메소드를 정의 해야 겠네
그럼 또 DAO로 가야지

//비밀번호 확인 메소드
public boolean isCorrectPassowrd(String no, String password) {
    String sql="SELECT COUNT(*) FROM dataroom WHERE no=? AND password=?";

    try {
        psmt=conn.prepareStatement(sql);
        psmt.setString(1,no);
        psmt.setString(2,password);
        rs=psmt.executeQuery();
        rs.next();
        if(rs.getInt(1)==0) return false;
    }
    catch(SQLException e) {e.printStackTrace();}
    return true;
}

아 delete도 정의가 안되어있었어....

@Override
public int delete(String no) {
    int affected=0;
    String sql = "DELETE dataroom WHERE no=?";
    try {
        psmt = conn.prepareStatement(sql);
        psmt.setString(1,no);
        affected=psmt.executeUpdate();
    }
    catch(SQLException e) {e.printStackTrace();}
    return affected;
}////////////////

+ Recent posts