我的Spring MVC项目中有一个处理文件上传的简单表单。
form.jsp
<form method="POST" enctype="multipart/form-data" action="/upload" id="form">
<input id="file" type="file" name="file"><br />
<input type="submit" value="Upload">
<input type="reset" value="Reset">
</form>
由于表单的操作,我被重定向到我localhost:8080/myApp/upload
localhost:8080/myApp/form
而不是@Controller
@RequestMapping(method = RequestMethod.POST, value = "${context}/upload", headers = "content-type=multipart/*")
public String uploadFile(@RequestParam("file") MultipartFile file, Model model) {
//do some upload stuff
model.addAttribute("uploadSuccess", "Upload Successful.");
return "/form";
}
是否可以仅阻止表单操作的重定向,但仍保留值${context}/upload
以便调用我的Controller方法?我需要我的页面返回myApp/form
,因为这个特殊的url会调用一个单独的Controller方法来检索一些数据
请注意,我不希望将我的jsp文件重命名为'upload.jsp'而且我不想制作一个AJAX帖子(谢谢IE9)。有什么想法吗?
答案 0 :(得分:0)
有时需要将HTTP重定向发回给 客户端,在呈现视图之前。这是可取的,例如, 当一个控制器被POST数据和响应调用时 实际上是另一个控制器的委托(例如在 成功提交表格)。在这种情况下,正常的内部前进 意味着另一个控制器也会看到相同的POST数据, 如果它可能会与其他人混淆,这可能会有问题 预期数据。
可以通过以下方式完成:
return "redirect:/form";
redirect
的一个好处是它可以防止用户通过执行刷新意外重新POST
相同的数据。刷新会强制结果页面GET
,而不是重新发送初始POST数据。
更新:
默认redirect:/view
会将您的模型属性作为查询参数附加到您的网址。在某些情况下这可能是不合需要的,因为它可能将敏感信息暴露给用户。利用RedirectAttributes addFlashAttribute(String attributeName, Object attributeValue)
方法存储Flash属性,用于在从一个URL重定向到另一个URL时存储属性(成功/失败消息等)