我正在试图找出在Spring MVC中处理Post / Redirect / Get设计模式的正确方法。 Spring 4.0.x文档报告:
控制器不应该真正关心如何处理响应。一般情况下,它应仅根据已注入的视图名称进行操作。
和
与
redirect:
前缀一样,如果将带有forward:
前缀的视图名称注入控制器,则控制器不会检测到在处理响应方面发生任何特殊情况。
通过阅读本文,似乎处理重定向的正确方法是将逻辑视图名称redirect:somewhere
注入Controller,以便处理程序方法不会注意到我们实际上正在实现PRG模式(或者,一般来说,我们正在出于任何原因进行重定向。)
如果我们假设已经添加了一些非基本类型作为模型属性,那么使用RedirectAttributes
将我们想要生存的数据作为flash属性存储到重定向是合理的。然而,此时我们实际上让控制器知道我们将重定向。
因此,首先注入视图名称的原因是什么?更一般地说,通过将逻辑视图名称注入外部依赖项来添加另一级别的间接是否有意义?
感谢。
答案 0 :(得分:1)
我认为这句话绝对过时了。
它最初是为Spring 1.2.4编写的,甚至在Spring得到注释之前。
那个注入视图名称的控制器声明如何看待那个时间:
<bean name="/editaccount.form" class="org.springframework.web.servlet.mvc.SimpleFormController">
<property name="formView"><value>account</value></property>
<property name="successView"><value>account-created</value></property>
<property name="commandName"><value>Account</value></property>
<property name="commandClass"><value>samples.Account</value></property>
</bean>
Spring MVC的设计从那时起发生了巨大的变化,因此我不认为这个建议现在仍然有效。