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;
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 )
{
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" />
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이 들어가게 됩니다.