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 the Author

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

Comments

avatar
5 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
venkatAdolfoLevanVarun Vikram SinghSpring MVC Tutorials Recent comment authors
newest oldest most voted
venkat
Guest
venkat

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

Adolfo
Guest
Adolfo

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
Guest
Levan

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

Varun Vikram Singh
Guest
Varun Vikram Singh

Please write some article about Spring Security.

trackback
Spring MVC Tutorials

[…] ParameterMethodNameResolver example With ParameterizableViewController, you don’t need to hard code the view name in the controller class anymore, instead, you specify the view name through the ParameterizableViewController’s “viewName” property. […]