::Java Platform::/::Spring:: | Posted by 그냥그냥그 2009. 1. 6. 15:32

:: Spring MultiActionController 사용법 ::



Spring MVC에서 컨트롤러들은 하나의 역활뿐이 할 수 없지만

MultiActionController를 사용하면 Struts의 DispatchAction과 같은 효과를 낼 수 있습니다.

우선 코드를 먼저 보면

기본적인 필요한 클래스를 Import 합니다.

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

그리고 원하는 클래스에 MultiActionController를 상속합니다.

public class NoticeController extends MultiActionController

그 후

public ModelAndView selectPreview( HttpServletRequest request , HttpServletResponse response )
{
....생략
}

public ModelAndView selectView( HttpServletRequest request , HttpServletResponse response , NoticeVo command )
{
....생략
}


원하는만큼 메소드를 생성합니다. 이름은 어떠한 것이라도 상관없습니다.

반환값도 ModelAndView 뿐만 아니라 void String 타입도 가능합니다.

그리고 AbstractController 에서처럼 command를 설정해서 파라미터값 들을 가져오고 싶을때에는

위 코드 두번째처럼 원하는 getter setter로 이루어진 자바빈을 등록하면 자동으로 command라는 객체에

파라미터가 들어가게 됩니다.

이제 applicationContext에 설정을 해보겠습니다.

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
       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-2.5.xsd">

<bean id = "noticeController" class = "kr.pe.raisondetre.controller.plain.NoticeController"
       p:methodNameResolver-ref = "multiActionResolver" />

<bean id = "multiActionResolver" class = "org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"
          p:paramName = "type" />

컨트롤러에 파라미터로 methodNameResolver , ref = ParameterMethodNameResolver의 id 값을 넣어 줍니다.

ParameterMethodNameResolver에서는 파라미터로 paramName , value를 원하는 파라미터명으로 설정합니다.

위와 같이 설정 했을 경우 http://localhost:8080/Raisondetre/notice.htm?type=sleectPreview

으로 접속시에 MultiActionController에서 selectPreview 메소드를 실행하게 됩니다.

파라미터값을 command로 받을 때에도

http://localhost:8080/Raisondetre/notice.htm?type=sleectView&id=1

이렇게 받게되면 selectView메소드에서 NoticeVO라는 command객체의 id setter 메소드에 1이 들어가게 됩니다.