게시판 게시물등록 컨트롤러 관련 질문입니다.
- 작성자 :
- 조*훈
- 작성일 :
- 2016-06-23 09:44:08
- 조회수 :
- 1,578
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
@RequestMapping("/cop/bbs/insertBoardArticle.do")
public String insertBoardArticle(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("bdMstr") BoardMaster bdMstr,
@ModelAttribute("board") Board board, BindingResult bindingResult, SessionStatus status, ModelMap model) throws Exception {
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
beanValidator.validate(board, bindingResult);
if (bindingResult.hasErrors()) {
BoardMasterVO master = new BoardMasterVO();
BoardMasterVO vo = new BoardMasterVO();
vo.setBbsId(boardVO.getBbsId());
vo.setUniqId(user.getUniqId());
master = bbsAttrbService.selectBBSMasterInf(vo);
model.addAttribute("bdMstr", master);
//----------------------------
// 기본 BBS template 지정
//----------------------------
if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) {
master.setTmplatCours("/css/egovframework/cop/bbs/egovBaseTemplate.css");
}
model.addAttribute("brdMstrVO", master);
////-----------------------------
return "cop/bbs/EgovNoticeRegist";
}
if (isAuthenticated) {
List<FileVO> result = null;
String atchFileId = "";
final Map<String, MultipartFile> files = multiRequest.getFileMap();
if (!files.isEmpty()) {
result = fileUtil.parseFileInf(files, "BBS_", 0, "", "");
atchFileId = fileMngService.insertFileInfs(result); <--------------------------------------------- 이부분과
}
board.setAtchFileId(atchFileId);
board.setFrstRegisterId(user.getUniqId());
board.setBbsId(board.getBbsId());
board.setNtcrNm(""); // dummy 오류 수정 (익명이 아닌 경우 validator 처리를 위해 dummy로 지정됨)
board.setPassword(""); // dummy 오류 수정 (익명이 아닌 경우 validator 처리를 위해 dummy로 지정됨)
board.setNttCn(unscript(board.getNttCn())); // XSS 방지
bbsMngService.insertBoardArticle(board); <--------------------------------------------- 이부분과
}
//status.setComplete();
return "forward:/cop/bbs/selectBoardList.do";
}
위에서 보면 controller 단에서 insert 를 2번 수행하는데 두개의 서비스는 트랜잭션이 묶여야 하지 않나요??
AOP 는 인터페이스에 적용되는 방식이라서 class 를 구현한 controller 에는 적용되지 않는걸로 알고있는데....
의도적인 부분인가요 아니면 의도치않은 구현상의 오류인가요?? 아니면 제가 잘못알고있는건가요 ㅠ
public String insertBoardArticle(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("bdMstr") BoardMaster bdMstr,
@ModelAttribute("board") Board board, BindingResult bindingResult, SessionStatus status, ModelMap model) throws Exception {
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
beanValidator.validate(board, bindingResult);
if (bindingResult.hasErrors()) {
BoardMasterVO master = new BoardMasterVO();
BoardMasterVO vo = new BoardMasterVO();
vo.setBbsId(boardVO.getBbsId());
vo.setUniqId(user.getUniqId());
master = bbsAttrbService.selectBBSMasterInf(vo);
model.addAttribute("bdMstr", master);
//----------------------------
// 기본 BBS template 지정
//----------------------------
if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) {
master.setTmplatCours("/css/egovframework/cop/bbs/egovBaseTemplate.css");
}
model.addAttribute("brdMstrVO", master);
////-----------------------------
return "cop/bbs/EgovNoticeRegist";
}
if (isAuthenticated) {
List<FileVO> result = null;
String atchFileId = "";
final Map<String, MultipartFile> files = multiRequest.getFileMap();
if (!files.isEmpty()) {
result = fileUtil.parseFileInf(files, "BBS_", 0, "", "");
atchFileId = fileMngService.insertFileInfs(result); <--------------------------------------------- 이부분과
}
board.setAtchFileId(atchFileId);
board.setFrstRegisterId(user.getUniqId());
board.setBbsId(board.getBbsId());
board.setNtcrNm(""); // dummy 오류 수정 (익명이 아닌 경우 validator 처리를 위해 dummy로 지정됨)
board.setPassword(""); // dummy 오류 수정 (익명이 아닌 경우 validator 처리를 위해 dummy로 지정됨)
board.setNttCn(unscript(board.getNttCn())); // XSS 방지
bbsMngService.insertBoardArticle(board); <--------------------------------------------- 이부분과
}
//status.setComplete();
return "forward:/cop/bbs/selectBoardList.do";
}
위에서 보면 controller 단에서 insert 를 2번 수행하는데 두개의 서비스는 트랜잭션이 묶여야 하지 않나요??
AOP 는 인터페이스에 적용되는 방식이라서 class 를 구현한 controller 에는 적용되지 않는걸로 알고있는데....
의도적인 부분인가요 아니면 의도치않은 구현상의 오류인가요?? 아니면 제가 잘못알고있는건가요 ㅠ
A
조지훈님, 안녕하세요.
비즈니스 로직 규칙 등에 따라 의도적일수도, 의도치 않은 오류일수도 있습니다.
다만, 멀티파트로 받아오는 내용의 경우 서비스 단에서 처리하기에는 로직이 좀더 복잡해 지는 부분이 있으며, 물리적인 파일 업로드 자체는 트랜잭션이 걸리지 않는 부분이므로, 이에 따른 검토도 필요할 것으로 보입니다.
센터에서 제공하는 것을 비즈니스 로직 사정에 맞게 얼마든지 변경하실 수 있으므로, 뜻에 따라 사용하시면 될 것 같습니다.
감사합니다.
비즈니스 로직 규칙 등에 따라 의도적일수도, 의도치 않은 오류일수도 있습니다.
다만, 멀티파트로 받아오는 내용의 경우 서비스 단에서 처리하기에는 로직이 좀더 복잡해 지는 부분이 있으며, 물리적인 파일 업로드 자체는 트랜잭션이 걸리지 않는 부분이므로, 이에 따른 검토도 필요할 것으로 보입니다.
센터에서 제공하는 것을 비즈니스 로직 사정에 맞게 얼마든지 변경하실 수 있으므로, 뜻에 따라 사용하시면 될 것 같습니다.
감사합니다.