簡體   English   中英

Spring MVC-發送模型以查看並返回給控制器

[英]Spring MVC - send model to view and back to controller

我的應用程序中的數據流有問題。

在控制器中,我從數據庫中獲取一些模型,然后將其傳遞給視圖-這里顯示了一些字段(並非全部),用戶可以對其進行修改。然后,當他提交表單時,控制器應該更新db中的模型。

問題是流程,因為並非所有字段都在標記中,所以提交表單后它們不會通過。.我發現的唯一解決方案是用所有字段創建其他標記,而這些標記未用於將它們向前傳遞。

但是如果我有很多字段,例如-30,我將不得不創建很多隱藏字段...

您認為哪種解決方案是最好的?

問候,M。

您有2個選擇

  1. 創建一個@ModelAttribute注釋的方法,以從數據庫中為每個請求獲取模型對象
  2. 使用@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.

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