我有这样的表格
<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")
是否可以重定向到页面并在其上显示错误消息?
答案 0 :(得分:4)
重定向导致Servlet容器使用302状态代码和Location
标头响应客户端,其值为要转到下一个的URI。
模型和请求属性仅在一个请求的生命周期内存在。因此,在Servlet容器发送302之后,它们就消失了。您需要使用Flash属性。如果您使用的是Spring 3.1+,则可以使用RedirectAttributes
执行此操作。