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;
}////////////////
'학원 > JSP' 카테고리의 다른 글
12/05 57-3 [JSP] Error + 스크랩핑(이건 천천히 정리) (0) | 2022.12.06 |
---|---|
12/05 57-2 [JSP] 자료실만들기5(Edit/페이징적용) (2) | 2022.12.06 |
12/02 56-3 [JSP] 자료실만들기.3(view) (0) | 2022.12.04 |
12/02 56-2 [JSP] 자료실만들기2.(write+up/download) (0) | 2022.12.04 |
12/02 56-1 [JSP] 자료실만들기1.(DAO,DTO,index,list) (0) | 2022.12.04 |