当前位置: 首页 > 面试题库 >

Java,Spring Framework MVC-重定向

章越
2023-03-14
问题内容

我正在使用Spring Framework3。我有一个表单,用于向文章发布评论。提交表单后,将检查是否有任何错误。如果没有错误,则控制器返回字符串

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

而且一切都很好。

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

"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对象中的属性
  • 此JSP标记的实现调用response.getAttribute(name)以查找Errors要显示的实例

使用时redirect:url,您指示Spring将a发送302 Found到客户端的浏览器,以强制浏览器向新URL 发出 第二个 请求。

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

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



 类似资料:
  • 问题内容: 我想做的是,当他们最初使用此方法时,进入免责声明页面,然后在此之后的任何时候都转到另一个页面。我当前的方法只是带给我免责声明页面。让我知道是否需要进一步解释…谢谢!!! 基本上,我需要在第一次点击此方法时添加一个If来转到页面,我想是这样的: 问题答案: 当该人第一次点击该页面时,在会话层上抛出一个标志。然后,无论何时有人进入页面,您都可以检查它是否存在,并相应地重定向他们。唯一的问题

  • 问题内容: 我试图重定向java中子进程的stdin和stdout,最终我将把输出转到JTextArea或其他东西。 这是我当前的代码, 输出如下所示: 我期望看到输出“ Hello World”字符串。也许是因为父进程的存活时间不够长? 我还希望能够发送和接收多个命令。 问题答案: 在尝试侦听输入流之前,您已经尝试写入输出流,因此您什么也没看到是有道理的。为使此成功,您将需要对两个流使用单独的线

  • 问题内容: 我偶然遇到了一篇文章,该文章最近讨论了Java中的双重检查锁定模式及其陷阱,现在我想知道我多年来使用的那种模式的变体是否会遇到任何问题。 我看过许多关于该主题的文章和文章,并了解了对部分构造的对象的引用所带来的潜在问题,据我所知,我认为我的实现不受这些问题的影响。以下模式是否有问题? 而且,如果没有,人们为什么不使用它?在围绕此问题进行的任何讨论中,我从未见过推荐它的方法。 问题答案:

  • 问题内容: 我有一个受身份验证保护的网址:www.domain.com/alias 请求时将返回另一个URL:www.another.com/resource.mp4(不受保护) 我想知道Java中是否存在一种将从给定URL返回真实URL的方法。像这样:第二=解决(第一) 我正在考虑加载第一个并尝试读入响应,也许是location属性,但是由于我不是Java专家,所以我想知道Java是否已经面临这

  • 本文向大家介绍java转发和重定向的区别,包括了java转发和重定向的区别的使用技巧和注意事项,需要的朋友参考一下 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL

  • 我在与Maven一起的Java项目中使用了Launch4j插件。当我将project编译为exe并在未安装Java的Windows系统上运行时,它重定向(自动打开web浏览器)下载Java但带有32位版本。我想重定向下载64位最新版本。有可能吗? 我在Maven中的插件定义看起来像 我还尝试在中添加但无法结束编译并返回以下错误