通常,要在Spring MVC应用程序中返回视图或页面,您需要创建一个类,该类扩展AbstractController ,并返回ModelAndView()对象。
public class WelcomeController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView model = new ModelAndView("WelcomePage");
return model;
}
}
在Bean配置文件中,声明一个ControllerClassNameHandlerMapping以自动检测映射。
<bean
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<bean class="com.mkyong.common.controller.WelcomeController" />
但是,您不认为对于简单的重定向任务而言,配置太多了吗? 幸运的是,Spring带有ParameterizableViewController来简化上述过程。 使用ParameterizableViewController ,您不再需要在控制器类中对视图名称进行硬编码,而是通过ParameterizableViewController的“ viewName ”属性将视图名称声明性地放入。
注意
ParameterizableViewController是AbstractController的子类,并基于“ viewName”属性返回ModelAndView, 它纯粹是一个重定向类 ,仅此而已,🙂ParameterizableViewController.java
public class ParameterizableViewController extends AbstractController{ //... protected ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response) throws Exception { return new ModelAndView(getViewName()); }
讲解
在本教程中,它展示了如何使用ParameterizableViewController控制器在Spring MVC应用程序中进行页面重定向。
1. ParameterizableViewController
不需要控制器类,只需声明ParameterizableViewController bean并通过“ viewName ”属性指定视图名称即可。 此外,您必须为其定义一个明确的映射。
<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>
<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>
在上面的代码片段中,您是否希望视图名称“ welcome”将返回“ WelcomePage”? 抱歉,不是,您必须定义一个显式映射 ,因为ControllerClassNameHandlerMapping不会为任何内置的Spring MVC控制器生成映射。
2.查看
只是一个显示标题行的简单JSP。
WelcomePage.jsp.jsp
<html>
<body>
<h2>ParameterizableViewController Example</h2>
</body>
</html>
3.演示
通过“ http:// localhost:8080 / SpringMVC / welcome.htm ”访问它,“ welcome.htm ”将返回“ /WEB-INF/pages/WelcomPage.jsp ”。
下载源代码
下载它– SpringMVC-ParameterizableViewController-Example.zip (7KB)
参考
翻译自: https://mkyong.com/spring-mvc/spring-mvc-parameterizableviewcontroller-example/