Spring MVC MultiActionController example
In Spring MVC application, MultiActionController is used to group related actions into a single controller, the method handler have to follow below signature :
public (ModelAndView | Map | String | void) actionName(
HttpServletRequest, HttpServletResponse [,HttpSession] [,CommandObject]);
1. MultiActionController
See a MultiActionController example.
package com.mkyong.common.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public class CustomerController extends MultiActionController{
public ModelAndView add(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return new ModelAndView("CustomerPage", "msg","add() method");
}
public ModelAndView delete(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return new ModelAndView("CustomerPage", "msg","delete() method");
}
public ModelAndView update(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return new ModelAndView("CustomerPage", "msg","update() method");
}
public ModelAndView list(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return new ModelAndView("CustomerPage", "msg","list() method");
}
}
With ControllerClassNameHandlerMapping configured.
<beans ...>
<bean
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<bean class="com.mkyong.common.controller.CustomerController" />
</beans>
2. Mapping Examples
Now, the reuqested URL will map to the method name in the following patterns :
- CustomerController –> /customer/*
- /customer/add.htm –> add()
- /customer/delete.htm –> delete()
- /customer/update.htm –> update()
- /customer/list.htm –> list()
3. InternalPathMethodNameResolver
The InternalPathMethodNameResolver is the default MultiActionController implementation to map URL to method name. But, you are still allow to add prefix or suffix to the method name :
<beans ...>
<bean
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<bean class="com.mkyong.common.controller.CustomerController">
<property name="methodNameResolver">
<bean class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver">
<property name="prefix" value="test" />
<property name="suffix" value="Customer" />
</bean>
</property>
</bean>
</beans>
Now, the URL will map to the method name in the following pattern :
- CustomerController –> /customer/*
- /customer/add.htm –> testaddCustomer()
- /customer/delete.htm –> testdeleteCustomer()
- /customer/update.htm –> testupdateCustomer()
- /customer/list.htm –> testlistCustomer()
Note
With annotation, the MultiActionController is more easy to configure, visit this MultiActionController annotation example for detail.
With annotation, the MultiActionController is more easy to configure, visit this MultiActionController annotation example for detail.
Download Source Code
Download it – SpringMVC-MultiActionController-Example.zip (7KB)
awesome man…
hello mkyong, please update your spring tutorial with latest jars
hello, thanks for the tutorial but i also get 404 error, which url should i use ? thanks
Hi Mr Yong,
First I would like to appreciate your work which you are doing, It’s really very helpful for those whoever eager to learn desired technologies but they do not have a idea.almost topics are covered here with very clean practical examples and also you tried out to focus that when to use and where to use and when not, what are the pros and cons etc.
I am following your tutorial to learn Spring MVC, it’s great and enjoying learning..
during going through with MultiActionController Example i encountered one question in my mind and i was tried and googled as well but did’nt able to find exact answer.the question is very simple..
As in the example you mentioned MultiActionController can handle related kind of activity but those method should return either (ModelAndView | String | void | Map).
in the case of ModelAndView works fine, but i wanted to try to see how it works with other return types.
so i took a method with return type String and have put same view(jsp) in directory, happy to see it worked fine for me.
but when i tried to keep Map as a return type and i put some keys and values to map and returned a map but here i messed up that how to configure when a MutiActionController returns a Map instance. for that i tried to google and read about MultiActionController from the API, there is an API which seems to be responsible to handle the job but i am unable to understand , how should i use it??
or may be i have to do some other ?? Please help me to clear my doubt.
I would appreciate for your answer and for your time.
Hopping for a reply ASAP.
I am sorry for a bit long post.
-Vivek Bharadwaj
where is the prefix customer defined
I downloaded this code and while setting up this code in STS, I got these errors in my class,
Multiple markers at this line
– The type javax.servlet.http.HttpServletResponse cannot be resolved. It is indirectly
referenced from required .class files
– The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly
referenced from required .class files
– The type javax.servlet.ServletContext cannot be resolved. It is indirectly referenced
from required .class files
– The declared package “com.mkyong.common.controller” does not match the
expected package “src.main.java.com.mkyong.common.controller”
I was able to run the other projects but not sure what is the problem,
Any inputs?
Running this program gives a 404 requested resource not available error……….
Can Anyone please help……….
Change your server port then try to run again..
Please add the following dependency in pom.xml file. Error should be fixed.
javax.servlet
servlet-api
2.5
MKYONG please help….
Hi Mkyong,
First Thanks to u.This site is very useful for me,i had one query
can u please share the how to upload the video file in spring,can u please give me one example on that one.i really need that one.
Thanks,
Hi, maybe this will be helpful for somebody who will need dependencies in pom.xml:
Ivo.
thakzzzzz You very much, this was very useful to me …… thank u agein
I am getting 404 page not found error when trying to use the following URL,
http://localhost:8080/SpringMultiActionEx/customer/add.htm
Please advise.
How to fetch the form data in this example
To fetch data in this example you configure blow:
To fetch data in this example you configure blow: