2017년 1월 25일 수요일

자바교육/스프링교육/스프링프레임워크/스프링부트학원추천★탑크리에듀_spring을 이용한 간단한 게시판 만들기 (6)

게시글 등록, 수정, 리플등록 등에 대해서 올립니다~ 

위 서비스의 차이점은 모두 게시물 등록을 하는 한 화면을 보지만 
등록의 경우 등록화면이 비어있고 
수정의 경우 등록화면에 값이 들어있고 
리플의 경우 등록화면에 값은 비어있지만 숨은 값들이 있어야겠죠 

그러면 같은 등록화면의 url를 호출하되 그전에 미리 등록화면과 매칭되는 DTO객체의 값들을 해당 서비스에 맞게 세팅해 인자로 해서 넘겨주면 되겠죠? 
그후 다시 그 등록하면으로부터 재 세팅된 DTO객체를 넘겨 받아 로직 처리하는 서비스 호출 후 view를 리턴합니다~ 

이것을 처리하는 컨트롤러가 SimpleFormController 를 상속한 BoardSave컨트롤러 하나 입니다~ ㅠㅠ 

이것이 가능한 이유는 해당 컨트롤러는 두개의 메소드를 override하게 되는데 
호출되는 방법에 있어서 요청이 
get으로 오게되면 formBackingObject() 
post로 오게되면 onSubmit()로 달리하는거지요 

단 이때  BoardSave의 파라메터값으로 sessionForm을 true로 지정해야지 됩니다. xml문서에서 하면 되겠죵~ 
설정을 안하게 되면 기본값인 false로 post로 요청되더라도formBackingObject()를 호출하게  되도록 설정이 되어있습니다.이것땜시 한참을 삽질했습니다~ ㅠㅠ 

먼저 
spring_servlet.xml에 다음 url입력시 board_save 컨트롤러를 호출하게 매핑되어 있습니다 단 처리로직이 틀리기때문에 mod를 파라메터로 넘겨주었습니다~ 
게시물등록 : board_save.do?mod=insert 
게시물수정 : board_save.do?mod=modify&num=${board.num} 
답변 등록 : board_save.do?mod=reply&num=~" 

BoardSave 로직은 
1. get으로 요청이 들어오므로 formBackingObject() 호출 
  해당 메소드에서는 request로 넘어온 mod에 따라  BoardDTO를 세팅하여 
  요청이 들어온 페이지로 반환 
  이렇게되면  같은화면인데 수정일때는 입력된값을 볼수있지만 새등록일때는 
  비어있는 화면을 보겠죠 
  **** 
  insert는 new BoardDTO 
  modify는 num파라메터로 select하여 얻어온 BoardDTO 
  reply는 역시 num파라메터로 select하여 얻어온 BoardDTO중 일부만 세팅 

2.게시물등록페이지에서 값 입력후 POST로 요청들어오면 onSubmit()호출 
  이 메소드는  Object command라는 파라메터를 하나 더 받는데요 
  이파라메터를 통해 값들이 BoardDTO에 자동 매핑됩니다. 
  그럼 이값들을 가지고 로직을 수행하는 DAO를 호출~ 
  다른 컨트롤들과 마찬가지로 ModelAndView를 반환하여 view를 보여줍니다~ 

 package board.controller; 

import java.util.Iterator; 
import java.util.List; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.validation.BindException; 
import org.springframework.web.bind.RequestUtils; 
import org.springframework.web.bind.ServletRequestDataBinder; 
import org.springframework.web.multipart.MultipartFile; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.SimpleFormController; 

import board.common.FileUploadUtil; 
import board.dto.BoardDTO; 
import board.dto.BoardFile; 
import board.service.BoardService; 

public class BoardSave extends SimpleFormController{ 
        
        private BoardService boardService; 
        private String realUploadPath = null;; 
        
        public BoardSave(){ 
                setCommandName("board"); 
                setCommandClass(BoardDTO.class); 
        } 
        
        /** SimpleFormController POST 
        * 폼으로부터 데이터 받아서 로직 처리 command 객체 session 저장~  **/ 
        public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, 
                        BindException exception ) 
                        throws Exception { 

                if(logger.isDebugEnabled()){ 
                        logger.debug("entering '0nSubmit' method..."); 
                } 
                                
                int result = 0; 
                BoardDTO board = (BoardDTO)command; 
                
                if(request.getParameter("num")!= null){ 
                        board.setNum(Integer.parseInt(request.getParameter("num"))); 
                } 

                List fileList = board.getFile(); 
                /*Iterator fileIter = fileList.iterator(); 
                while(fileIter.hasNext()){ 
                        MultipartFile multiFile = (MultipartFile)fileIter.next(); 
                        if(multiFile.getSize() > 0){ 
                                board.addBoardFiles(FileUploadUtil.uploadFormFile(multiFile, realUploadPath)); 
                        } 
                }*/ 
                for(int i=0; i<fileList.size(); i++){ 
                        if(fileList.isEmpty()){ 
                                break; 
                        } 
                        board.addBoardFiles(FileUploadUtil.uploadFormFile((MultipartFile)fileList.get(i), realUploadPath)); 
                } 
                
                /** 
                * submit name에 따라 처리 로직 호출 
                */ 
                if(request.getParameter("add") != null){ 
                        if(logger.isDebugEnabled()){                                      
                                logger.debug("executing 'add board' mehtod..");                                                                  
                        } 
                        result = boardService.insert(board); 
                }else if(request.getParameter("modify") != null){ 
                        if(logger.isDebugEnabled()){ 
                                logger.debug("executing 'update board' mehtod..."); 
                        } 
                        result = boardService.update(board); 
                }else{ 
                        if(logger.isDebugEnabled()){ 
                                logger.debug("executing 'reply board' mehtod..."); 
                        } 
                        result = boardService.reply(board); 
                } 
                
                if(result == 1){ 
                        return new ModelAndView(getSuccessView()); 
                }else{ 
                        //return new ModelAndView("boardError"); 
                        ModelAndView mav = new ModelAndView(); 
                        mav.setViewName("boardError"); 
                        return mav; 
                } 
        } 
        
        /** SimpleFormController GET 방식 
        * request mod값에 따라 bean boardwrite.jsp로 반 
        *        insert,reply : new board 
        *        modify : select board**/ 
        protected Object formBackingObject(HttpServletRequest request) throws Exception { 
                
                if(logger.isDebugEnabled()){ 
                        logger.debug("entering 'formBackingObject' method..."); 
                } 
                
                if(request.getParameter("mod")!=null){ 
                        String mod = request.getParameter("mod"); 
                        logger.debug(mod); 

                        if(mod.equals("modify")){ 
                                
                                if(request.getParameter("num")!=null){ 
                                        int num = Integer.parseInt(request.getParameter("num")); 

                                        BoardDTO board = (BoardDTO)boardService.select(num); 
                                        return board; 
                                }else{ 
                                        return new BoardDTO(); 
                                } 
                                
                        }else if(mod.equals("reply")){ 
                                BoardDTO board = new BoardDTO(); 
                                board.setNum(Integer.parseInt(request.getParameter("num"))); 
                                board.setBgroup(Integer.parseInt(request.getParameter("group"))); 
                                board.setBpos(Integer.parseInt(request.getParameter("pos"))); 
                                board.setBdepth(Integer.parseInt(request.getParameter("depth"))); 
                                board.setContent("RE : "); 

                                return board; 
                        } 
                } 
        return new BoardDTO(); 

        } 

        public void setRealUploadPath(String realUploadPath) { 
                this.realUploadPath = realUploadPath; 
        } 
        
        public void setBoardService(BoardService boardService){ 
                this.boardService = boardService; 
        } 

  

댓글 없음:

댓글 쓰기