当用户收到错误/验证消息时,如何将用户重定向到Spring控制器的成功视图?

时间:2016-09-09 10:45:44

标签: java spring spring-mvc

我有一些问题,我无法找到解决方案。

如果用户在下载先前发票之前尝试下载发票,则会向用户显示错误消息。发票显示在发票搜索结果列表(即成功视图)中,该列表已在用户搜索发票(即表单视图)之后显示。在尝试下载发票时,应用程序通过报告控制器,这是我执行检查是否仍在生成先前发票的地方。如果是,我需要将用户重新定向到发票搜索结果页面,并显示错误消息。目前,我的重定向正在将它们带回搜索表单(表单视图)。有谁知道如何将它们重定向到结果页面(成功视图)?理想情况下,我需要一个通用的解决方案,因为其他报告可以从应用程序的其他部分下载。

我们使用Spring 7的Java 7,这部分代码很老,所以它使用基于XML的bean配置而不是注释。如果有人能想到更好的解决方案,那也会非常受欢迎。

非常感谢。

编辑:只是为了添加更多细节 - 如果可能的话我需要一个通用的解决方案 - 重定向发生在一个不同的控制器中,我试图重新引导回来,所以我没有访问命令类等 - 只有HTTP servlet请求和响应。 (我可能在这里回答了我自己的问题,因为没有命令对象听起来不可能!)。

3 个答案:

答案 0 :(得分:0)

您可以使用ModelAndView,当您返回时,您可以通过执行以下操作来决定重定向的位置:

@RequestMapping(value = "/yourMapping")
public ModelAndView endpoint(Map<String, Object> model, HttpServletRequest    httpServletRequest) {
    // your logic here
    String target = "redirect:" + yourUrl;
    return new ModelAndView(target, model);
}

希望有所帮助

答案 1 :(得分:0)

ModelAndView一起实现此目标的另一种方法是使用RedirectAttributes

示例:

@RequestMapping(value = "/yourMapping")
public ModelAndView endpoint(
        HttpServletRequest httpServletRequest,
        final RedirectAttributes redirectAttributes
        ) {
    // your logic here

    ModelAndView mov = new ModelAndView();

    String target = "redirect:" + yourUrl;

    redirectAttributes.addFlashAttribute("error", true);
    redirectAttributes.addFlashAttribute("added", "Error message here");

    mov.setViewName(target);

    return mov;
}

然后在JSP中,您可以执行以下操作:

<c:if test="${error == true}">
    <c:out value="${message}" />
</c:if>

答案 2 :(得分:-1)

这就是你想要做的 需要将用户重新定向回发票搜索结果页面,并显示错误消息。如果他们在下载先前发票之前尝试下载发票

要实现这一点,你将不得不重定向到创建成功视图的控制器,你需要包含一个错误消息,你无法直接重定向到view / jsp,因为那时模型将是空的,并且没有结果显示

重定向到控制器的代码

public String processRegistration(Model model) {

// if(make your check here) (

model.addAttribute("error", "error message");
return "redirect:/yoururl/{error}";
}
}

在接收控制器中

您可以将错误消息检索为

public String handle(Model model) {
  String errormsg = (String) model.asMap().get("error");
set this in the model as an attribute// may not be required but check 
and procceed with the method to create the view 

}

在jsp中,您可以显示上面代码中提到的错误消息

<c:if test="${error == true}">
    <c:out value="${message}" />
</c:if>