[英]Spring MVC - send model to view and back to controller
我的應用程序中的數據流有問題。
在控制器中,我從數據庫中獲取一些模型,然后將其傳遞給視圖-這里顯示了一些字段(並非全部),用戶可以對其進行修改。然后,當他提交表單時,控制器應該更新db中的模型。
問題是流程,因為並非所有字段都在標記中,所以提交表單后它們不會通過。.我發現的唯一解決方案是用所有字段創建其他標記,而這些標記未用於將它們向前傳遞。
但是如果我有很多字段,例如-30,我將不得不創建很多隱藏字段...
您認為哪種解決方案是最好的?
問候,M。
您有2個選擇
@ModelAttribute
注釋的方法,以從數據庫中為每個請求獲取模型對象 @SessionAttributes
將其放入會話中。 @ModelAttribute
注釋的方法 除了使用GET方法填充模型外,還可以使用@ModelAttribute
注釋方法 。 該方法將在控制器中的每個請求處理方法之前調用。 需要注意的一件事是,在每個請求中都傳遞了ID。
@ModelAttribute
public YourObject modelObject(@RequestParam long id) {
return yourObjectDao.findOne(id);
}
現在,您可以簡單地從GET方法中刪除模型的填充,並在POST方法中添加一個@ModelAttribute
注解的方法參數。 然后它將使用新獲得的對象。
這種方法的缺點是,在使用樂觀鎖定時,它不再那么有效,因為每次您都獲得最新版本。
@SessionAttributes
使用@SessionAttributes
注釋控制器,這指示Web處理將匹配的模型對象存儲在會話中,並在綁定之前從那里檢索它們。
@SessionAttributes("yourObject")
@Controller
public class YourController { ... }
現在,在您的POST方法中添加一個類型為SessionStatus
的參數,並在一切正常后在該對象上調用isComplete
方法。 這將清除此控制器放入會話中的所有會話屬性。
public String handlePost(@ModelAttribute YourObject model, BindingResult result, SessionStatus status) {
if (result.hasErrors) {
return "yourView";
} else {
status.isComplete();
yourObjectDao.save(model);
return "redirect:your-new-view";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.