我需要在控制器中创建一个动作来生成excel文件。问题是,如果发生错误,页面会被更改,但我希望保持显示该错误的同一页面。
我在我的控制器中有这个动作:
@RequestMapping(value="/excel", method = RequestMethod.POST)
public String generateExcel(HttpServletResponse response, Model model)
如果出现错误,我想留在同一页面上:
if(noError){
// generate Excel
response.setHeader("Content-disposition","attachment; filename= "excel.xls");
response.setContentType("application/vnd.ms-excel");
//...
return "";
} else {
// stay on the same page and show error
// TODO
return ?;
}
我的Excel生成工作正常但发生错误时会显示新页面。我无法进行ajax调用来生成excel。 有人能帮助我吗?
答案 0 :(得分:1)
使用GetMapping:
@GetMapping(value = "/download")
public void download(
@RequestParam("fileReference") String fileReference, // sample param
HttpServletResponse response) throws IOException {
Assert.hasText(fileReference);
try {
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=myfilename.pdf");
response.setContentLength(...);
response.setBufferSize(...);
response.getOutputStream().write(...);
} finally {
response.getOutputStream().close();
}
}
然后使用
打开您的链接target="_blank"
答案 1 :(得分:0)
重定向到同一页面可以是一个选项。 请记住,如果您要刷新页面,您将丢失页面中的所有信息。 我只是说这个控制器将负责保存。