SPRING
2016.03.03 / 19:04

Spring - SpringÀÇ Controllerµé. 2.SimpleFormController

dwsi
Ãßõ ¼ö 289

<¿ªÇÒ>
ControllerÀÇ À̸§¿¡¼­µµ ¾Ë¼ö ÀÖ´Ù ½ÃÇÇ SimpleFormController´Â ÀԷ¹޴ FormÀ» °£´ÜÇÏ°Ô ¸¸µé¾î ÁÙ¼ö ÀÖ´Â Controller ÀÌ´Ù. 
Áï ÀԷ°ú ¼öÁ¤Ã¢, ¿¹¸¦ µé¸é °Ô½ÃÆÇÀÇ ±Û¾²±â¿Í ±Û ¼öÁ¤ âÀ» µû·Îµû·Î ¸¸µé ÇÊ¿ä ¾øÀÌ http get À¸·Î µé¾î¿À¸é ±Û¾²±â âÀ» º¸¿©ÁÖ°í ±Û Á¤º¸¸¦ ¾µ¶§(±Û¾²±â,±Û ¼öÁ¤) http post ¹æ½ÄÀ¸·Î µé¾î¿Ã¶§´Â ±ÛÀ» µðºñ¿¡ ÀÔ·ÂÇÏ´Â ÀÌ·± µû·Îµû·ÎÀÎ ±â´ÉÀ» ÇϳªÀÇ Å¬·¡½º·Î ±¸ÇöÇÏ´Â °ÍÀÌ´Ù.
±×·¸±â ¶§¹®¿¡ ¼öÁ¤form°ú ÀÔ·ÂformÀ» µÎ°¡Áö µû·Îµû·Î ¸¸µé ÇÊ¿ä°¡ ¾ø´Â °ÍÀÌ´Ù.

<»ç¿ë¹æ¹ý>
SimpleFormController¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ÀÌ Å¬·¡½º¸¦ »ó¼Ó ¹Þ¾Æ¼­ ½á¾ß ÇÑ´Ù. SimpleFormController¸¦ »ç¿ëÇÏ°Ô µÇ¸é formBackingObject() method¿Í onSubmit() ¸Þ¼Òµå¸¦ overriding Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

°Ô½ÃÆÇ¿¡¼­ ¿¹¸¦ µé¾î º¸¸é
°Ô½ÃÆÇ¿¡ ±ÛÀ» ¾²´Â ÆûÀ» º¸¿©Áְųª, °Ô½ÃÆÇÀÇ ±ÛÀ» ¼öÁ¤ÇÏ´Â ÆûÀ» º¸¿©ÁÖ´Â °ÍÀ» simpleFormController·Î ±¸ÇöÇÑ´Ù°í ÇÏÀÚ.
±Û¾²±â³ª ¼öÁ¤ µÑ´Ù formÀ» ¿äûÇÒ¶§´Â get ¹æ½ÄÀ» »ç¿ëÇÒ °ÍÀÌ´Ù.(¿Ö³Ä Çϸé URLÀ» ÅëÇØ form¿¡ Á¢±ÙÇϱ⠶§¹®ÀÌ´Ù)
±×¸®°í »ç¿ëÀÚ·Î ºÎÅÍ ±ÛÀ» ¾´ Á¤º¸, ȤÀº ¼öÁ¤ÇÑ Á¤º¸µéÀº post ¹æ½ÄÀ¸·Î ÄÁÆ®·Ñ·¯¿¡ Á¢±ÙÇÒ °ÍÀÌ´Ù.
À̶§ formBackingObject() method ´Â get¹æ½ÄÀ¸·Î Á¢±ÙÇÒ¶§ ½ÇÇà µÇ°í onSubmit() method´Â post¹æ½ÄÀ¸·Î µ¥ÀÌÅÍ°¡ ³Ñ¾î¿Ã¶§ ½ÇÇàÀÌ µÈ´Ù.
±×¸²À¸·Î º¸¸é


À̹ÌÁö 
´ÙÀ½°ú °°Àº ½ÇÇà ·çƾÀ» °ÅÄ£´Ù.

1. »ç¿ëÇÒ Å¬·¡½º¿¡ SimpleFormController¸¦ »ó¼Ó ¹Þ¾Æ formBackingObject() ¿Í onSubmit()¸¦ override ÇÑ´Ù.
package kr.co.springboard.controllers;

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

import kr.co.springboard.dto.BoardDTO;
import kr.co.springboard.service.BoardService;

import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

public class WriteSimpleFormController extends SimpleFormController {
    private BoardService boardService;
    public void setBoardService(BoardService boardService) {
        this.boardService = boardService;
    }

    
    
    @Override
    protected Object formBackingObject(HttpServletRequest request)
                                       throws Exception {
        int seq = ServletRequestUtils.getIntParameter(request, "seq", 0);
        BoardDTO boardDto = null;
        if(seq == 0){
            boardDto = new BoardDTO();
        }else if(seq > 0){
            boardDto = this.boardService.boardRead(seq);
        }
        return boardDto;
    }



    @Override
    protected ModelAndView onSubmit(HttpServletRequest request,
                                    HttpServletResponse response, 
                                    Object command, BindException errors)
                                    throws Exception {
        ModelAndView mnv = new ModelAndView();
        BoardDTO dto = (BoardDTO)command;
        if(dto.getSeq() == 0){
            boardService.boardInsert(dto);
        }else{
            boardService.boardUpdate(dto);
            
        }
        mnv.setViewName(getSuccessView());
        
        return mnv;
    }
    
}


2. DI¼³Á¤ºÎºÐ¿¡¼­ formView,successView,commandClass,commandNameÀ» property·Î ¼³Á¤ÇÑ´Ù.
<bean id="writeSimpleFormController" class="kr.co.springboard.controllers.WriteSimpleFormController">
        <property name="commandClass" value="kr.co.springboard.dto.BoardDTO"/>
        <property name="commandName" value="boardDto"/>
        <property name="formView" value="writeForm"/>
        <property name="successView" value="writeSuccess"/>
        <property name="boardService" ref="boardService"/>
</bean>

±âº»ÀûÀ¸·Î onSubmit()À» ½ÇÇàÇÒ¶§´Â AbstractCommandController¿¡¼­ command °´Ã¼¸¦ ÅëÇØ ÀÔ·ÂµÈ Á¤º¸¸¦ ¹Þ¾Æ¿À´Âµ¥ SimpleFormControllerÀÇ onSubmit()µµ ÀÌ¿Í °°Àº ¹æ½ÄÀ» äÅÃÇÏ°í ÀÖ´Ù. 
±×·¸±â ¶§¹®¿¡ commandClass¿ÍcommandNameÀ» ÅëÇØ command°´Ã¼¸¦ »ý¼ºÇØ ÁØ´Ù.
¶ÇÇϳª ¾ÆÁÖ Áß¿äÇÑ ¿ªÇÒÀº formBackingObject¿¡¼­ boardDto¸¦ ¸®ÅÏÇØ Áִµ¥ commandName¿¡ ¼³Á¤ÇÑ À̸§À¸·Î request °´Ã¼¿¡ ´ã±â±â ¶§¹®¿¡ commandNameÀ» ¼¼ÆÃÇØ ÁÖÁö ¾ÊÀ¸¸é Àý´ë·Î form ÆäÀÌÁö¿¡¼­ Á¤º¸¸¦ ¹ÞÀ» ¼ö°¡ ¾ø´Ù
±×¸®°í formView´Â formBackingObject¸¦ ½ÇÇàµÇ¾úÀ»¶§ ÀÚµ¿ÀûÀ¸·Î ModelAndView °´Ã¼¿¡ ¼¼ÆÃÀÌ µÊÀ¸·Î µû·Î ¼¼ÆÃÇØÁÖ¾î¾ß ÇÒ ÇÊ¿ä´Â ¾ø´Ù.
successView´Â ¼º°øÇÏ°í º¸¿©Áú ÆäÀÌÁö¸¦ ¼¼ÆÃÇÑ´Ù. SimpleFormController ¾È¿¡ ÀÖ´Â getSuccessView method¸¦ ÅëÇØ °ªÀ» °¡Á® ¿Ã ¼ö ÀÖ´Ù.