spring boot和freemarker项目,在收到表单并进行处理后,想要重定向到静态页面以显示一些信息,例如。 Processed successfully
。
控制器代码:
@RequestMapping(value="/send",method=RequestMethod.POST)
public String sendApplicationMail(@ModelAttribute("application")Application application, Model model){
System.out.println(application);
return "redirect:success";
}
success.ftl
src/main/resources/templates
但是当我提交表单时,浏览器没有重定向到sucess.ftl
,但有以下错误消息:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sun Jan 24 17:50:39 CST 2016
There was an unexpected error (type=Not Found, status=404).
No message available
但是当我删除redirect:
时,只需return "succes"
,这次就可以了。
然后我试了
return "redirect:success.ftl";
return "redirect:/success.ftl";
两者都有相同的上述错误页面?
那么我怎么能让它正确地重定向到success.ftl
?
答案 0 :(得分:1)
如果资源只是一个静态资源,请尝试将该静态资源放在静态资源目录中,如resources/static/htmlstatic.html
。
使用return "redirect:/htmlstatic.html";
或return "htmlstatic.html";
。不要忘记将.html
放在静态页面返回的末尾。
当你只返回success
而不是Spring View解析器本身时,解析逻辑视图名称并返回视图。您需要在控制器或方法级别注释中映射此路径。
不需要使用控制器映射静态资源。 DispatcherServlet自动映射静态内容。使用Spring启动,您甚至不必配置它。
或
您可能还想删除redirect:
并让Spring Boot视图解析程序根据您返回的逻辑名称对右视图进行排序。
如果它返回success
而不是模板需要模型数据,那么占位符可以被模型中的键值对替换。
当您使用redirect:
spring时,会杀死上一个请求以及模型数据。因此,模型数据无法在重定向中存在,并且您会收到错误。
您应该使用 flash属性来传递模型数据,同时重定向或传递一些数据,如用户名作为路径参数,如return "redirect:/sucess/{username}"
,而不是使用用户名从数据库中再次检索数据。
使用Flash属性非常简单,因此您无需再向数据库发出请求或存储该表单数据的位置。