【发布时间】:2014-07-05 06:53:45
【问题描述】:
我只是检查 Spring MVC 框架,所以我是新手,请原谅基本问题。但我正试图弄清楚视图解析器是如何工作的。
我创建了一个基本的控制器方法来添加这样的用户:
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addUser(@ModelAttribute("user") User user, BindingResult result) {
logger.entry(user, result);
userRepository.save(user);
String returnString="redirect:members/confirmation";
logger.exit(returnString);
return returnString;
}
我希望它重定向到 WEB-INF/pages 文件夹下的 members/confirmation.jsp 页面。这只是一个简单的 JSP,上面写着“感谢注册”。重定向是这样的,它不允许表单重复发布。 (这只是一个基本的测试应用)
我在mvc-dispatcher-servlet.xml配置文件中配置了internalviewresolver:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="0"/>
</bean>
但它并没有解决确认视图,而只是 404。
我在这里错过了什么?
谢谢!
丰富
【问题讨论】:
-
另外,如果我取出重定向前缀,它工作正常。
-
您承认重定向和转发。重定向意味着向浏览器发送响应,要求它将请求发送回另一个位置。你想要的是一个前锋。不要使用重定向:前缀。
-
redirect 是阻止重复表单提交问题的推荐方法,对吗? stackoverflow.com/questions/2324931/…
-
POST-REDIRECT-GET 模式确实是一个好主意。但是您必须重定向到可从外部访问的资源的 URL,而不是视图。
redirect:前缀之后的路径必须是您的控制器方法之一的路径,可以使用 GET 请求访问:一旦您创建了一个用户,您就可以重定向到允许列出所有用户的 URL,例如,或者允许查看创建的用户详细信息的 URL。 -
好酷,有没有办法通过约定巧妙地解析到 jsp 的路径而不是编写控制器方法?因此,如果我在 GET 上请求“/users/confirmation”,它将自动解析为“/users/confirmation.jsp”。 (我一直在使用 Rails,它非常擅长这些类型的约定)
标签: spring spring-mvc