簡體   English   中英

阻止表單操作在文件上傳后更改URL

[英]Prevent Form Action From Changing URL After File Upload

我的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>

但是由於表單的作用,我被重定向到了@Controller指定的localhost:8080/myApp/upload而不是localhost:8080/myApp/form

@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)。 有什么想法嗎?

17.5.3重定向到 Spring Docs的 視圖中找到了我的確切案例的答案

有時需要在呈現視圖之前向客戶端發出HTTP重定向。 例如,當已經用POST數據調用了一個控制器,並且響應實際上是委派給另一個控制器時(例如,成功提交表單時),這是理想的。 在這種情況下,正常的內部轉發將意味着另一個控制器也將看到相同的POST數據,如果將其與其他預期數據混淆,則可能會出現問題。

這可以通過以下操作完成:

return "redirect:/form";

一個很好的益處的redirect是,它可以防止用戶意外重新POST通過執行刷新荷蘭國際集團相同的數據。 刷新將強制對結果頁進行GET ,而不是重新發送初始POST數據。

更新:

默認的redirect:/view會將模型屬性作為查詢參數附加到URL上。 在某些情況下,這可能是不可取的,因為它可能會將敏感信息暴露給用戶。 利用RedirectAttributes addFlashAttribute(String attributeName, Object attributeValue)方法來存儲Flash屬性,當從一個URL重定向到另一個URL時,該屬性將用於存儲屬性(成功/失敗消息等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM