Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
관리 메뉴

뇌약간고침

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

Study/Spring

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

minulbora 2024. 2. 15. 17:36

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

-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;
	}