Java,Spring Framework MVC - 重定向

我正在使用 Spring 框架 3.我有一个用于对文章发表评论的表格.提交表单时,会检查是否有任何错误.如果没有错误,控制器返回字符串

"redirect:entryView/"+comment.getEntryId();

一切都很好.

但是当出现一些错误时,如果控制器返回

"redirect:entryView/"+comment.getEntryId();

错误应该显示在带有 spring-form.tld 标签的表单附近:

<form:errors path="author"/>

但是没有显示错误!当我试图返回时

"entryView/"+comment.getEntryId();

如果没有 redirect: 前缀,那么它会去/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();
    }
}
}
xiaomaxiaofeng 回答:Java,Spring Framework MVC - 重定向

  • 在验证/绑定期间,Errors 被保存为 HttpServletResponse 对象中的属性
  • 这个JSP标签的实现调用response.getAttribute(name)寻找Errors实例来显示
  • During validation/binding, the Errors are saved as an attribute in the HttpServletResponse object
  • The implementation of this JSP tag calls response.getAttribute(name) to find the Errors instance to display

当你使用 redirect:url 时,你是在指示 Spring 向客户端的浏览器发送 302 Found 以强制浏览器进行 秒em> 请求,到新的 URL.

由于重定向到的页面使用不同的请求/响应对象集进行操作,因此原始 Errors 将丢失.

将错误"传递给您要重定向到的页面以便新页面显示它的最简单方法是自己处理它,方法是向 Session 对象添加一条消息第二个页面的控制器可以查看(或通过在 URL 中传递参数).

这篇关于Java,Spring Framework MVC - 重定向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3175477.html

大家都在问