我有一些问题,我无法找到解决方案。
如果用户在下载先前发票之前尝试下载发票,则会向用户显示错误消息。发票显示在发票搜索结果列表(即成功视图)中,该列表已在用户搜索发票(即表单视图)之后显示。在尝试下载发票时,应用程序通过报告控制器,这是我执行检查是否仍在生成先前发票的地方。如果是,我需要将用户重新定向到发票搜索结果页面,并显示错误消息。目前,我的重定向正在将它们带回搜索表单(表单视图)。有谁知道如何将它们重定向到结果页面(成功视图)?理想情况下,我需要一个通用的解决方案,因为其他报告可以从应用程序的其他部分下载。
我们使用Spring 7的Java 7,这部分代码很老,所以它使用基于XML的bean配置而不是注释。如果有人能想到更好的解决方案,那也会非常受欢迎。
非常感谢。
编辑:只是为了添加更多细节 - 如果可能的话我需要一个通用的解决方案 - 重定向发生在一个不同的控制器中,我试图重新引导回来,所以我没有访问命令类等 - 只有HTTP servlet请求和响应。 (我可能在这里回答了我自己的问题,因为没有命令对象听起来不可能!)。
答案 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>