有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一点问题,我想不出解决办法

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

我们有带Spring3.1的Java7,这部分代码非常古老,因此它使用基于XML的bean配置,而不是注释。如果有人能想出一个更好的解决方案,我们也会非常感激

非常感谢

编辑:只需添加一点细节——如果可能的话,我需要一个通用的解决方案——重定向发生在不同的控制器中,与我尝试重新定向回的控制器不同,因此我没有访问命令类或类似的权限——只有HTTP servlet请求和响应。(我可能已经在这里回答了我自己的问题,因为没有命令对象听起来是不可能的!)


共 (3) 个答案

  1. # 1 楼答案

    这就是你想要做的 需要将用户重新引导回“发票搜索结果”页面,并显示错误消息。如果他们试图在前一张发票的下载完成之前下载发票

    要实现这一点,您必须重定向到创建成功视图的控制器,并且需要包含一条错误消息,您不能直接重定向到视图/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> 
    
  2. # 2 楼答案

    结合ModelAndView实现这一点的另一种方法是使用^{}

    例如:

    @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>
    
  3. # 3 楼答案

    您可以使用^{},当返回时,您可以通过执行以下操作来决定重定向到何处:

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

    希望有帮助