AbstractCommandController
  - 요청 파라미터를 특정 객체에 담고 싶을 때 사용
  - 지정한 커맨드 클래스의 객체를 생성한 뒤, 커맨드 객체의 프로퍼티의 이름과 일치하는 이름을 갖는 파라미터 값으로 프로퍼티를 설정


package bean;

public class UserBean {
    String userId;
    String passWord;
    String userName;
    String address;
   
    //각각의 get, set 메소드
    ......

   
    @Override
    public String toString() {
        return "UserBean [address=" + address + ", passWord=" + passWord
                + ", userId=" + userId + ", userName=" + userName + "]";
    }
}


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page session="false" %>   
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<html>
<head>
<title>User Reg Page</title>
</head>
<body>
 <div align="center">
  <h2>회원 가입</h2>
  <form action="userCont.sp" method="post">
  <table border="1">
   <tr height="30px">
    <td>ID</td>
    <td>
     <input type="text" name="userId" value=""/>
    </td>
   </tr>
   <tr height="30px">
    <td>PW</td>
    <td>
     <input type="password" name="passWord" value=""/>
    </td>
   </tr>
   <tr height="30px">
    <td>성명</td>
    <td>
     <input type="text" name="userName" value=""/>
    </td>
   </tr>
   <tr height="30px">
    <td>주소</td>
    <td>
     <input type="text" name="address" value=""/>
    </td>
   </tr>
  </table>
  <table>
   <tr>
    <td><input type="submit" name="submit" value="reg"></input></td>
    <td><input type="reset" name="reset" value="reset"></input></td>
   </tr>
  </table>
  </form>
 </div>
</body>
</html>

▶ Form의 파라메터 전송시 자동맵핑이 되게 하기 위해서는 command 클래스의 속성명과 name값이 같아야 함.


package controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;

import bean.UserBean;

public class UserAbstractCommandController extends AbstractCommandController {

    //생성자를 이용하는 방법
    //public UserAbstractCommandController(){
    //    setCommandClass(UserBean.class);
    //    setCommandName("userBean");
    //}
   

    //생략
    ......

    @Override
    protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
            Object command, BindException errors)
            throws Exception {
        // TODO Auto-generated method stub
       
        //command객체를 형변환 후 사용
        UserBean userBean = (UserBean)command;
       
        //필요한 로직을 처리
        System.out.println(userBean.toString());
       
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("viewName");
        modelAndView.addObject("attributeName", "attributeValue");
       
        return modelAndView;
    }
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!-- HandlerMapping -->
    <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/userCont.sp">userAbstractCommandController</prop>
            </props>
        </property>
    </bean>

   
    <!-- ViewResolver -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass">
            <value>org.springframework.web.servlet.view.JstlView</value>
        </property>
        <property name="prefix">
            <value>jsp/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>
   
   
    <bean id="userAbstractCommandController" class="controller.UserAbstractCommandController">
        <property name="commandClass" value="bean.UserBean"></property>
        <property name="commandName" value="userBean"></property>
    </bean>

</beans>

▶ 커맨드 클래스와 커맨드 이름을 지정하는 방법은 xml에서 property로 설정하는 방법과
   AbstractCommandController를 상속받은 클래스의 생성자를 이용하는 방법이 있다.
     //생성자를 이용하는 방법
     public UserAbstractCommandController(){
         setCommandClass(UserBean.class);
         setCommandName("userBean");
     }




[참고자료] 스프링 2.5 프로그래밍 (최범균)

'프로그램 > Spring 2.5' 카테고리의 다른 글

MultiActionController  (0) 2012.03.10
SimpleFormController  (0) 2012.03.10
AbstractController  (0) 2012.03.07
ParameterizableViewController와 UrlFilenameViewController  (0) 2012.03.07
Spring Controller의 종류  (0) 2012.03.07

+ Recent posts