수정/삭제 시 첨부파일이 존재하는 경우 함께 처리해 주어야 한다.
-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;
}
'Study > Spring' 카테고리의 다른 글
[STS] 콘솔 경고 (CONSOLE PERFORMANCE WARNING) Word wrap enabled. (2) | 2024.02.26 |
---|---|
[스프링] 새로운 스프링 프로젝트 세팅하기 (0) | 2024.02.22 |
[스프링] 0213 수업 아카이빙 : 게시판 글쓰기 - 첨부파일 업로드 (0) | 2024.02.15 |
[스프링] 0210 수업 아카이빙: 인터셉터와 필터 (1) | 2024.02.12 |
[스프링] 0207 스프링 아카이브 (1) | 2024.02.08 |
댓글