java如何在SpringMVC中使用重定向在jsp上显示验证消息
我有这样的表格
<form:form method="POST" action="posts/add" modelAttribute="post">
<table>
<tr>
<td><form:label path="author"><spring:message code="blog.posts.author.name"/></form:label></td>
<td>
<form:select path="author">
<form:option value="NONE" label="--- Select ---"/>
<form:options items="${authors}" />
</form:select>
</td>
<td><form:errors path="author" cssClass="error" /></td>
</tr>
<tr>
<td><form:label path="text"><spring:message code="blog.posts.text"/></form:label></td>
<td><form:textarea path="text" rows="5" cols="30"/></td>
<td><form:errors path="text" cssClass="error" /></td>
</tr>
</table>
<input type="submit" value="<spring:message code="blog.posts.save"/>" />
</form:form>
和它的控制器
@Controller
public class PostsController {
@Autowired
private PostDAO postDao;
@Autowired
private Validator validator;
@RequestMapping("/posts")
public String showAllPosts(ModelMap model) {
List<String> authors = new ArrayList<String>();
authors.add("John B.");
authors.add("Jack C.");
List<Post> posts = postDao.findAll();
model.addAttribute("posts", posts);
model.addAttribute("authors", authors);
return "posts";
}
@ModelAttribute("post")
public Post getPost(ModelMap model) {
return new Post();
}
@RequestMapping(value = "/posts/add", method = RequestMethod.POST)
public String savePost(@ModelAttribute("post") Post post, BindingResult errors, ModelMap model) {
validator.validate(post, errors);
if (errors.hasErrors()) {
model.addAttribute("posts", postDao.findAll());
return "posts";
}
postDao.addPost(post);
model.addAttribute("posts", postDao.findAll());
return "redirect:/posts";
}
我使用自定义验证器
如果出现以下情况,它将显示带有错误消息的页面:
if (errors.hasErrors()) {
model.addAttribute("posts", postDao.findAll());
return "posts";
}
我试图在返回语句中使用redirect:/posts
但在这种情况下,它不会在页面上显示错误消息
还有?我试图添加到控制器。但是没有成功
@SessionAttributes("post")
是否可以重定向到页面并在其上显示错误消息
# 1 楼答案
重定向导致Servlet容器使用302状态代码和
Location
头响应客户机,该头的值是要转到下一个的URI模型和请求属性仅在一个请求的生存期内存在。因此,在Servlet容器发送302之后,它们就消失了。您需要使用flash属性。如果您使用的是Spring3.1+,那么可以使用^{} 实现这一点