Main Tutorials

Spring MVC ParameterizableViewController example

In general, to return a view or page in Spring MVC application, you need to create a class, which extends the AbstractController , and return a ModelAndView() object.


public class WelcomeController extends AbstractController{
	
	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
		HttpServletResponse response) throws Exception {

		ModelAndView model = new ModelAndView("WelcomePage");
		return model;
		
	}
	
}

In the bean configuration file, declared a ControllerClassNameHandlerMapping to auto detect the mapping.


<bean 
 class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
	 
<bean class="com.mkyong.common.controller.WelcomeController" />

But, don’t you think it’s too much configuration for a simple redirect task? Fortunately, Spring comes with ParameterizableViewController to simplify the above processes. With ParameterizableViewController, you don’t need to hard code the view name in the controller class anymore, instead, you put view name declarative through the ParameterizableViewController’s “viewName” property.

Note
The ParameterizableViewController is a subclass of AbstractController, and return a ModelAndView based on the “viewName” property, it’s purely a redirect class, nothing more, nothing less 🙂

ParameterizableViewController.java


public class ParameterizableViewController extends AbstractController{
//...
protected ModelAndView handleRequestInternal(
    HttpServletRequest request, HttpServletResponse response)
	throws Exception {

	return new ModelAndView(getViewName());
}

Tutorial

In this tutorial, it shows the use of ParameterizableViewController controller to do a page redirection in the Spring MVC application.

1. ParameterizableViewController

No controller class is required, just declared the ParameterizableViewController bean and specify the view name through the “viewName” property. Additionally, you have to define an explicit mapping for it.


<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-2.5.xsd">

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/welcome.htm">welcomeController</prop>
            </props>
        </property>
    </bean>
	
   <bean name="welcomeController" 
            class="org.springframework.web.servlet.mvc.ParameterizableViewController">
	    <property name="viewName" value="WelcomePage" />
   </bean>
 
   <bean id="viewResolver"
	    class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
            <property name="prefix">
              <value>/WEB-INF/pages/</value>
            </property>
            <property name="suffix">
              <value>.jsp</value>
            </property>
    </bean>

</beans>
Define an explicit mapping is required.


<beans ...>
//...
<bean 
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
	
<bean name="welcomeController" 
    class="org.springframework.web.servlet.mvc.ParameterizableViewController">
	<property name="viewName" value="WelcomePage" />
</bean>
//...
</beans>

In above snippet, are you expect a view name “welcome” will return a “WelcomePage”? Sorry, it’s not, you have to define an explicit mapping, because the ControllerClassNameHandlerMapping won’t generate a mapping for any built-in Spring MVC controller.

2. View

Just a simple JSP to display a head line.

WelcomePage.jsp.jsp


<html>
<body>
<h2>ParameterizableViewController Example</h2>
</body>
</html>

3. Demo

Access it via “http://localhost:8080/SpringMVC/welcome.htm“, the “welcome.htm” will return back a “/WEB-INF/pages/WelcomPage.jsp“.

SpringMVC-ParameterizableViewController-Example-1

Download Source Code

Reference

  1. ParameterizableViewController documentation
  2. Spring MVC SimpleUrlHandlerMapping example

About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
6 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Pratik Gaurav
3 years ago

You need to update as, only GET and HEAD methods are now by-default provided, for post method we need to add some code snippet like

venkat
8 years ago

i am working with parameterizableviewcontroller with my code. but i got the problem caused: The requested resource () is not available.

shubham utturkar
3 months ago
Reply to  venkat

same with me

Adolfo
11 years ago

Great post! I’m reading Pro Spring 2.5 book and even this hasn’t so clear examples. Your blog became a complement for my spring studies.

Levan
12 years ago

Thanks again.
As always – small and to the point )

Varun Vikram Singh
13 years ago

Please write some article about Spring Security.