[스프링] 0215 게시글 수정/삭제

    수정/삭제 시 첨부파일이 존재하는 경우 함께 처리해 주어야 한다.  

    -dao.xml

    <!-- 게시물 수정 -->
    <update id="boardUpdate" parameterType="com.sist.web.model.HiBoard">
    	UPDATE TBL_HIBOARD
    	   SET HIBBS_TITLE = #{hiBbsTitle},
    	       HIBBS_CONTENT = #{hiBbsContent}
    	 WHERE HIBBS_SEQ=#{hiBbsSeq}
    </update>
    <!-- 첨부파일 삭제 -->
    <delete id="boardFileDelete" parameterType="long">
    	DELETE FROM TBL_HIBOARD_FILE
    	  WHERE HIBBS_SEQ = #{value}
    </delete>
    <!-- 게시글 삭제 -->
    <delete id="boardDelete" parameterType="long">
    	DELETE FROM TBL_HIBOARD
    	 WHERE HIBBS_SEQ= #{value}
    </delete>

     

     

    -dao.java

    //첨부파일 가져오기
    	public HiBoardFile boardFileSelect (long HiBbsSeq);
    	
    	//게시물 수정
    	public int boardUpdate (HiBoard hiBoard);
    	
    	//게시물 첨부파일 삭제
    	public int boardFileDelete (long hiBbsSeq);
    	
    	//게시물 삭제
    	public int boardDelete(long hiBbsSeq);

     

    -Service.java

    --수정 폼 조회

    	//게시물 수정 폼 조회 (첨부파일 포함)
    	public HiBoard boardViewUpdate(long hiBbsSeq) {
    		HiBoard hiBoard = null;
    		try {
    			hiBoard = hiBoardDao.boardSelect(hiBbsSeq);
                //존재하는 글인지 확인
    			if(hiBoard != null) {
                	//파일 있는지 확인
    				HiBoardFile hiBoardFile = hiBoardDao.boardFileSelect(hiBbsSeq);
    				if(hiBoardFile != null) {
                    //파일이 있으면 담아주기
    					hiBoard.setHiBoardFile(hiBoardFile);
    				}
    			}
    		}
    		catch(Exception e) {
    			logger.error("[HiBoardService] boardViewUpdate Exception",e);
    		}
    		return hiBoard;
    	}

    --게시글 수정( 트렌잭션은 첨부파일 유무로 갈림)

    	//수정
    	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
    	public int boardUpdate (HiBoard hiBoard) throws Exception{
    		int cnt = 0;
    		cnt =hiBoardDao.boardUpdate(hiBoard);
    		if(cnt>0 && hiBoard.getHiBoardFile()!= null) {
    			HiBoardFile delHiBoardFile = hiBoardDao.boardFileSelect(hiBoard.getHiBbsSeq());
    			//기존 파일 있으면 삭제
    			if(delHiBoardFile != null ) {
    				//업로드 경로에 존재하는 파일 삭제
    				FileUtil.deleteFile(UPLOAD_SAVE_DIR + FileUtil.getFileSeparator()+delHiBoardFile.getFileName());
    				hiBoardDao.boardFileDelete(hiBoard.getHiBbsSeq());
    			}
    			HiBoardFile hiBoardFile = hiBoard.getHiBoardFile();
    			hiBoardFile.setHiBbsSeq(hiBoard.getHiBbsSeq());
    			hiBoardFile.setFileSeq((short)1);
    			
    //			hiBoard.getHiBoardFile().setFileSeq((short)1);
    //			hiBoard.getHiBoardFile().setHiBbsSeq(hiBoard.getHiBbsSeq());
    			
    			
    			hiBoardDao.boardFileInsert(hiBoard.getHiBoardFile());
    		}
    		return cnt;
    	}

    --게시글 삭제

    	//게시물 삭제(첨부파일이 있으면 함께 삭제)
    	@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
    	public int boardDelete (long hiBbsSeq) throws Exception {
    		
    		int cnt = 0;
    		
    		HiBoard hiBoard = boardViewUpdate(hiBbsSeq);
    		
    		if(hiBoard != null) {
    			
    			cnt = hiBoardDao.boardDelete(hiBbsSeq);
    			
    			if(cnt>0) {
    				HiBoardFile hiBoardFile = hiBoard.getHiBoardFile();
    				//첨부파일이 있느냐?
    				if(hiBoardFile != null) {
    					if(hiBoardDao.boardFileDelete(hiBbsSeq)>0) {
    						//DB는 삭제가 되었다는 뜻. 그럼 실제로 저장된 파일 삭제(아래) 실행
    						FileUtil.deleteFile(UPLOAD_SAVE_DIR+FileUtil.getFileSeparator()+hiBoardFile.getFileName());
    					}
    				}
    			}
    		}
    		
    		return cnt;
    	}

     

     

    -controller

    --화면전달+수정

    	//게시물 수정 화면 전달
    	@RequestMapping (value="/board/updateForm")
    	public String updateForm (ModelMap model, HttpServletRequest request, HttpServletResponse response) {
    		//쿠키 값 저장
    		String cookieUserId = CookieUtil.getHexValue(request, AUTH_COOKIE_NAME);
    		long hiBbsSeq = HttpUtil.get(request, "hiBbsSeq", (long)0);
    		String searchType = HttpUtil.get(request, "searchType", "");
    		String searchValue = HttpUtil.get(request, "searchValue","");
    		long curPage = HttpUtil.get(request, "curPage", (long)1);
    		
    		HiBoard hiBoard = null;
    		
    		if(hiBbsSeq>0) {
    			
    			hiBoard = hiBoardService.boardViewUpdate(hiBbsSeq);
    			if(hiBoard != null) {
    				if(!StringUtil.equals(hiBoard.getUserId(), cookieUserId)) {
    					//같지 않을 때 (수정 불가)
    					hiBoard = null;
    				}
    			}
    		}
    		model.addAttribute("searchType",searchType);
    		model.addAttribute("searchValue", searchValue);
    		model.addAttribute("curPage", curPage);
    		model.addAttribute("hiBoard", hiBoard);
    		
    		return "/board/updateForm";
    	}
    	
    	//게시물 수정
    	@RequestMapping (value="/board/updateProc", method=RequestMethod.POST)
    	@ResponseBody
    	public Response<Object> updateProc (MultipartHttpServletRequest request, HttpServletResponse response){
    		Response<Object> ajaxRes = new Response<Object>();
    		
    		String cookieId = CookieUtil.getHexValue(request, AUTH_COOKIE_NAME);
    		long hiBbsSeq = HttpUtil.get(request, "hiBbsSeq", (long)0);
    		String hiBbsTitle = HttpUtil.get(request, "hiBbsTitle", "");
    		String hiBbsContent	= HttpUtil.get(request, "hiBbsContent", "");
    		FileData fileData = HttpUtil.getFile(request, "hiBbsFile", UPLOAD_SAVE_DIR);
    		
    		logger.debug("===============================hiBbsSeq"+hiBbsSeq);
    		
    		if(hiBbsSeq >0 && !StringUtil.isEmpty(hiBbsTitle) && !StringUtil.isEmpty(hiBbsContent)) {
    			HiBoard hiBoard = hiBoardService.boardSelect(hiBbsSeq);
    			
    			if(hiBoard != null) {
    				if(StringUtil.equals(cookieId, hiBoard.getUserId())) {
    					hiBoard.setHiBbsTitle(hiBbsTitle);
    					hiBoard.setHiBbsContent(hiBbsContent);
    					//파일이 있으면 파일도 세팅
    					if(fileData!=null && fileData.getFileSize()>0) {
    						HiBoardFile hiBoardFile = new HiBoardFile();
    						hiBoardFile.setFileName(fileData.getFileName());
    						hiBoardFile.setFileOrgName(fileData.getFileOrgName());
    						hiBoardFile.setFileExt(fileData.getFileExt());
    						hiBoardFile.setFileSize(fileData.getFileSize());
    						hiBoard.setHiBoardFile(hiBoardFile);
    					}
    					
    					try {
    						if(hiBoardService.boardUpdate(hiBoard)>0) {
    							ajaxRes.setResponse(0, "success");
    
    						}
    						else {
    							
    							ajaxRes.setResponse(500, "server error");
    						}
    					}
    					catch(Exception e) {
    						logger.error("[hiBoardController] updateProc");
    						ajaxRes.setResponse(500, "server error");
    					}
    				}
    				else {
    					//작성자가 아님
    					ajaxRes.setResponse(403, "server have prob");
    				}
    			}
    			else {
    				//hibbsseq 에 해당하는 게시물이 없음
    				ajaxRes.setResponse(404, "Not Found");
    			}	
    		}
    		else {
    			ajaxRes.setResponse(400, "bad Request");
    		}
    		
    		return ajaxRes;
    	}

    한시간은 고민한 오류 여기서 발생

    그건바로 NullPointerException

    이유는 임의로 ajaxRes 객체 = null 해둔 뒤에 까먹은거였음......................................

    수정은 정상적으로 작동했는데 왜 안되는지 이해를 못함.. 당연히 response가 안넘어가지... 내가 null을 넘겼으니까...하여튼 null을 넣을 수 없는 객체에 null을 넣으면 java 에서 NullPointerException를 띄워준다...친절하다...참고 https://yeolco.tistory.com/73

     

    java.lang.NullPointerException 해결법

    자바에서 NullPointerException은 RuntimeException입니다. 특수한 널 값은 객체 참조에 할당할 수 있습니다. 프로그램에 널값을 가지는 객체 참조를 사용하려고하면 NullPointerException이 throw됩니다. + null에

    yeolco.tistory.com

    --삭제

    	//게시물 삭제
    	@RequestMapping (value="/board/delete", method=RequestMethod.POST)
    	@ResponseBody
    	public Response<Object> delete (HttpServletRequest request, HttpServletResponse response){
    		Response<Object> ajaxRes = new Response<Object>();
    		String cookieId = CookieUtil.getHexValue(request, AUTH_COOKIE_NAME);
    		long hiBbsSeq = HttpUtil.get(request, "hiBbsSeq",(long)0);
    		if(hiBbsSeq>0) {
    			HiBoard hiBoard = hiBoardService.boardSelect(hiBbsSeq);
    			if(hiBoard!=null) {
    				if(StringUtil.equals(cookieId, hiBoard.getUserId())) {
    					try {
    						if(hiBoardService.boardDelete(hiBbsSeq)>0) {
    							ajaxRes.setResponse(0, "suc");
    						}
    						else {
    							ajaxRes.setResponse(500, "server error2");
    						}
    					}
    					catch(Exception e) {
    						logger.error("[hiBoardController]delete Exception",e);
    						ajaxRes.setResponse(500, "server error");
    					}
    				}
    				else {
    					ajaxRes.setResponse(403, "its not yours");
    				}
    			}
    			else {
    				ajaxRes.setResponse(404, "Not Found");
    			}
    		}
    		else {
    			ajaxRes.setResponse( 400, "bad Request");
    		}
    		return ajaxRes;
    	}

    댓글