控制器替代中的硬编码视图名称?

时间:2010-01-27 23:10:21

标签: spring java-ee spring-mvc

我在Spring框架中使用Java EE。我一直在设置一个测试项目(到目前为止一切正常),我目前在控制器中有以下行,只需加载一个名为index.jsp的视图:

return new ModelAndView("index");

这只是一个测试项目,所以我不担心语法或类似的东西。我只是想知道在Spring中从控制器中加载某个视图的最佳方法是什么?我确信像这样硬编码不是最佳实践,我只是想知道这样做的正确方法是什么?名称应该从某个配置文件中提取吗?

3 个答案:

答案 0 :(得分:1)

这里的Spring模式是ViewResolver。实质上,您的控制器返回您要转发到的视图的符号名称,Spring将该符号名称解析为实际视图。如果你没有另外配置它​​,那么它只会在最后粘贴.jsp并使用它 - 最简单的情况。

但是,这可能会像您希望的那样复杂,包括,如您所建议的那样,使用配置文件将名称映射到实际的JSP。与Spring一样,有十几种不同的方法 - 请参阅this part of the docs

答案 1 :(得分:0)

如果您使用的是SimpleFormControllers,则可以设置formView和successView。在GET请求中返回formView,如果PUT请求中的所有内容都成功,则默认返回successView。

答案 2 :(得分:0)

在我上一篇Spring 3.0网络应用程序中,我使用了以下组合:

  1. 我的Controller类中用于视图名称的常量字符串字段

  2. 一个属性文件,其值覆盖由Spring通过“context:property-override”配置注入的字段值:

  3. <context:property-override location="classpath:viewName.properties"/>

    为了让后者工作,您必须在调度程序XML配置文件中将所有控制器列为bean,或者使用@Component("fooController")对控制器进行注释(编辑:不确定@Controller("fooController")是否有效而是?)注释然后引用属性文件中的字段,如下所示:fooController.someView=someJsp

    不确定这是否是“最佳做法”,但对我来说效果不错。我确保在Controller类字段中添加注释,告诉未来的开发人员在属性文件中查找覆盖。