Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

WON.dev

modify.jsp 본문

SPRING/chapter04_MVC

modify.jsp

GAWON 2023. 7. 18. 10:00
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ include file="../include/header.jsp" %>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>
<div class="row">
   <div class="col-lg-12">
      <h1 class="page-header">게시글 수정-삭제 화면</h1>
   </div>
   <!-- /.col-lg-12 -->
</div>
<!-- /.row -->

<div class="row">
   <div class="col-lg-12">
      <div class="panel panel-default">
         <div class="panel-heading">게시글 수정-삭제 화면</div>
         <div class="panel-body">
            <form action="/board/modify" method="post" role="form">
               <div class="form-group">
                  <label>글 번호</label>
                  <input class="form-control" name="bno" value="${vo.bno}" readonly="readonly">
               </div>
               <div class="form-group">
                  <label>글 제목</label>
                  <input class="form-control" name="title" value="${vo.title}">
               </div>
               <div class="form-group">
                  <label>글 내용</label>
                  <textarea class="form-control" rows="3" name="content">${vo.content }</textarea>
               </div>
               <div class="form-group">
                  <label>작성자</label>
                  <input class="form-control" name="writer" value="${vo.writer }" readonly="readonly">
               </div>
               <sec:authentication property="principal" var="pinfo"/>
               <sec:authorize access="isAuthenticated()">   <!-- 비회원 수정 버튼 누르지 못하게 -->
                   <c:if test="${pinfo.username eq vo.writer}"> <!-- 작성자와 로그인 계정이 같으면 -->
		               <button type="submit" data-oper="modify" class="btn btn-primary">글 수정</button>
		               <button type="submit" data-oper="remove" class="btn btn-warning">글 삭제</button>                         
                   </c:if>
               </sec:authorize>
               <button type="submit" data-oper="list" class="btn btn-danger">목록</button>
               <input type="hidden" name="pageNum" value="${cri.pageNum }">
			   <input type="hidden" name="amount" value="${cri.amount }">
			   <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token }">
            </form>
         </div>
         <!-- /.panel-body -->
      </div>
      <!-- /.panel -->
   </div>
   <!-- /.col-lg-12 -->
</div>
<!-- /.row -->

<!-- 첨부파일 -->
<div class = "row">
   <div class = "col-lg-12">
      <div class = "panel panel-default">
         <div class = "panel-heading">파일 첨부</div>
         <!-- /.panel-heading -->
         <div class = "panel-body">
            <div class = "panel-body">
               <div class = "form-group uploadDiv">
                  <input type = "file" name = 'uploadFile' multiple>
               </div>
               <div class = 'uploadResult'>
                  <ul></ul>
               </div>
            </div>
         </div>
      </div>
   </div>
</div>

<script type="text/javascript">

	$(function(){
      
      var formObj = $("form");
      
      $("button").on('click', function(e){
         e.preventDefault();
         
         var operation = $(this).data("oper");
         
         if(operation === 'remove'){
            formObj.attr("action", "/board/remove");
            
         }else if(operation === 'list'){
            // 주소, 방식
            //self.location = '/board/list';
            formObj.attr("method", "get");
            formObj.attr("action", "/board/list");
            
            var pageNumTag = $("input[name='pageNum']").clone();
            var amountTag = $("input[name='amount']").clone();
            
            formObj.empty(); //해당 요소 내부 초기화
            
            formObj.append(pageNumTag);
            formObj.append(amountTag);
            
         } else if (operation === 'modify') {
             console.log("submit clicked");
             formObj.attr("action", '/board/modify');
             var str = "";
             
             $(".uploadResult ul li").each(function(i,obj){
                var jobj = $(obj);
                console.dir(jobj);
                
                str += "<input type='hidden' name='attachList["+i+"].fileName' value='"+jobj.data("filename")+"'>";
                str += "<input type='hidden' name='attachList["+i+"].uuid' value='"+jobj.data("uuid")+"'>";
                str += "<input type='hidden' name='attachList["+i+"].uploadPath' value='"+jobj.data("path")+"'>";
                
             });
             formObj.append(str);
          }

          formObj.submit();  //폼 전송
       });
      
	});    

</script>
<script type="text/javascript"><!-- 파일 업로드 스크립트 -->
	$(function(){
		//input=file 변경시 fileInputChange() 함수 실행
		$("input[type='file']").on('change', function(){
			fileInputChange();
		});
		
		var regex = new RegExp("(.*?)\.(exe|sh|zip|alz)$");	//정규식
	   	var maxSize = 5242880;	//5MB
	    var cloneObj = $(".uploadDiv").clone();
	   	function checkExtension(fileName,fileSize){
	   		if(fileSize >= maxSize){
	   			alert("파일 사이즈 초과");
	   			return;
	   		}
	   		
	   		if(regex.test(fileName)){
	   			alert("해당 종류의 파일은 업로드할 수 없습니다.");
	   			return false;
	   		}
	   		return true;	
	   	}
		
		
		
		function fileInputChange(){
			$(".uploadResult ul").empty();
			var formData = new FormData();
			var inputFile = $("input[type='file']");
			var files = inputFile[0].files;
			
	      	for(var i=0; i<files.length; i++){
	      		if(!checkExtension(files[i].name, files[i].size)){
	      			return false;
	      		}
	      		
	      		
	      		formData.append('uploadFile', files[i]);
	      	}
	   	 	$.ajax({
	             type : 'post',
	             url : '/uploadAjaxAction',
	             data : formData,
	             contentType : false,
	             processData : false,
	             dataType : 'json',
	             success : function(result){
	               	console.log(result);
	               	$(".uploadDiv").html(cloneObj.html());
	               	showUploadFile(result);
	             }
          	});
		}

		
		 var uploadResult = $(".uploadResult ul");
	      function showUploadFile(uploadResultArr){
	    	  var str = '';
	    	   
	    	   $(uploadResultArr).each(function(i, obj) {
	    		   
	    		  var fileCallPath = encodeURIComponent(obj.uploadPath +
	    				  								"/" + obj.uuid + 
	    				  								"_" + obj.fileName);
	    		   
	    		  str += '<li data-path="'+obj.uploadPath+'" data-uuid="'+ obj.uuid +'" data-filename="' + obj.fileName + '">';
	              str += '<div>';
	              str += '<img src="/resources/img/attach.png" style="width:15px" />';
	              str += '<span>' + obj.fileName + '</span>';
	              str += '<button type="button" data-file="'+fileCallPath+'" data-type="file" class="btn btn-warning btn-circle"><i class="fa fa-times"></i></button><br>';
	              str += '</div>';
	              str += '</li>';
	    	   });
	    	   uploadResult.html(str);
	      }
		
	      
	      //첨부 파일 삭제 클릭 이벤트
	      	uploadResult.on('click','button',function(){
	      		var targetFile = $(this).data('file');
	      		var targetLi = $(this).closest("li");
	
	      		 $.ajax({
	                 type : 'post',
	                 url : '/deleteFile',
	                 data : {fileName : targetFile},//fileName키 : targetFile값
	                 dataType : 'text',
	                 success : function(result){
	                   	//alert(result);
	                	 targetLi.remove();
	                 }
	                 
	              });
	          });		

	      
	});

</script>


<%@include file="../include/footer.jsp" %>

'SPRING > chapter04_MVC' 카테고리의 다른 글

footer.jsp  (0) 2023.07.19
register.jsp  (0) 2023.07.19
list.jsp  (0) 2023.07.18
get.jsp  (0) 2023.07.18
security-context.xml  (0) 2023.07.18