如果我理解正确,您想要做的是将用户发送到一个页面,例如“它不起作用/验证”页面或发送文件。
如果是这种情况,我们解决它的方法是ModelAndView
从我们的处理程序返回 a。您也可以将它作为参数包含在您的处理程序中,Spring 会为您创建一个,您可以直接返回它。如果表单输入验证失败,我们将View设置为自定义视图,该ModelAndView
视图将设置 Content-Disposition 和相关标头,然后OutputStream
从 HttpServletResponse 获取 并将文件写为字节。
像这样的东西(伪代码,所以可能需要调整):
@RequestMapping("/myHandler")
public ModelAndView myHandler(@ModelAttribute("myBean") MyBean myBean, BindingResults results, ModelAndView mav) {
if (results.hasErrors()) {
mav.setViewName("myErrorView"); // Uses the default view you have setup, passing the name as if you returned a String
} else {
mav.setView(new FileOutputView(dataToOutputOrWhatever); // Custom View class to output file as needed
}
return mav
}
但是,如果您想返回一个字符串并下载文件,那么您必须跳过一些环节。我发现的最简单的方法是设置一个模型属性,您可以在 JSP 端读取该属性,该属性告诉 JSP 是否调用文件下载。在 JSP 代码中,您将使用 JSTL 和 JavaScript 的组合来触发下载,或者使用 AJAX,或者在我们的例子中,使用 JavaScript 在IFRAME
.