Spring - Spring의 Controller들. 1.AbastractCommandController

Published on: 2009. 9. 13. 16:31 by louis.dev
소개
AbstractCommandController는 페이지의 넘어오는 파라미터들을 bean 객체에 자동맵핑이 되어 Controller 에서 사용 할 수 있게 만드는 역할을 한다.

jsp 페이지의 회원가입페이지 에서 파라미터로 name,age... 등등이 넘어오면 선언한 bean의 property인 String name, String age에 대응되어 자동 저장이 된다.

사용방법
DI를 선언한 xml 파일에서 직접 bean의 클래스경로인 "commandClass" 와 commandClass의 이름인 "commandName" 을 파라미터로 넘겨주어야 한다.

예)
<bean id="listAbstractCommandController"
       class="kr.co.springboard.controllers.ListAbstractCommandController">
     <property name="commandClass" value="kr.co.springboard.beans.BoardBean"/>
     <property name="commandName" value="boardBean"/>

     <property name="boardService" ref="boardService"/>
     <property name="viewName" value="boardList"/>
</bean>

이렇게 property 로 설정하는 방법이 있는가 하면 직접 AbstractCommandController를 확장한 클래스에서 다음과 같이 Contructor를 구현해도 된다.
public ListAbstractCommandController(){
  setCommandClass(BoardBean.class);
  setCommandName("boardBean");
 }


위의 2가지 방법으로 선언하면 AbstractCommandController의 handle() method를 통해서 전달 인자인 command를 통해 전송된 데이터를 받을 수 있다.

protected ModelAndView handle(HttpServletRequest request,
                         HttpServletResponse response,
                         Object command,
                         BindException errors) throws Exception {
  ModelAndView mnv = new ModelAndView();
  BoardBean boardBean = (BoardBean)command;
  BoardDTO dto = new BoardDTO();
  dto.setNowPage(boardBean.getNowPage());
  
  if(dto.getNowPage() == 0){
   dto.setNowPage(1);
  }
  dto.setTotalCount(boardService.boardTotalCount(dto));
  dto = (BoardDTO)PagingUtil.setPagingInfo(dto);
  List<BoardDTO> boardList = this.boardService.boardList(dto);
  
  mnv.setViewName(viewName);
  mnv.addObject("boardList", boardList);
  mnv.addObject("dto",dto);
  
  return mnv;
 }

위와 같이 생성자,혹은 xml문서의 property 로 세팅해준 commandClass와 commandName 은 handle() 메소드의 command object를 통해 데이터를 전달 받기 때문에 command instance를 생성해 주는 역할을 한다.
이렇게 전달된 command 객체를 원하는 형으로 형변환을 해서 사용하면 된다.