我正在使用Spring Framework3。我有一个表单,用于向文章发布评论。提交表单后,将检查是否有任何错误。如果没有错误,则控制器返回字符串
"redirect:entryView/"+comment.getEntryId();
而且一切都很好。
但是当有一些错误时,如果控制器返回
错误应使用spring-form.tld标签在表单附近显示:
<form:errors path="author"/>
但是没有显示的错误!当我试图返回时
"entryView/"+comment.getEntryId();
如果没有重定向:前缀,那么它将转到/rus/WEB- INF/jsp/entryView/8.jsp,并且存在HTTP状态404。但是必须转到http://example.com/rus/entryView/8,即文章和表单的评论所在的页面!
这是视图解析器:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>
我该怎么办?
其余控制器:
@Controller public class CommentController { private RusService rusService; private CommentValidator commentValidator; @Autowired public CommentController(RusService rusService,CommentValidator commentValidator){ this.rusService = rusService; this.commentValidator = commentValidator; } @RequestMapping(value="/addComment",method=RequestMethod.POST) public String addComment(Comment comment,BindingResult result){ commentValidator.validate(comment, result); if(result.hasErrors()){ return "redirect:entryView/"+comment.getEntryId(); }else{ rusService.postComment(comment); return "redirect:entryView/"+comment.getEntryId(); } } }
错误的显示<form:errors path="author"/>如下:
Errors
HttpServletResponse
response.getAttribute(name)
使用时redirect:url,您指示Spring将a发送302 Found到客户端的浏览器,以强制浏览器向新URL 发出 第二个 请求。
redirect:url
302 Found
由于重定向到的页面正在使用不同的请求/响应对象集进行操作,因此原始页面Errors将丢失。
将“错误”传递到要重定向到的页面以便显示新页面的最简单方法是自己处理它,方法是向Session对象添加消息,第二个页面的控制器可以查看该对象(或通过在网址中传递参数)。
Session