SpringMVC:學習筆記(4)——處理模型數據


SpringMVC—處理模型數據

說明

  SpringMVC 提供了以下幾種途徑輸出模型數據:
  – ModelAndView: 處理方法返回值類型為 ModelAndView時, 方法體即可通過該對象添加模型數據
  – Map及Model:入參為org.springframework.ui.Model、org.springframework.ui.ModelMap 或 Java.uti.Map 時,處理方法返回時,Map中的數據會自動添加到模型中。
  – @SessionAttributes: 將模型中的某個屬性暫存到HttpSession 中,以便多個請求之間可以共享這個屬性
  – @ModelAttribute: 方法入參標注該注解后, 入參的對象就會放到數據模型中。

ModelAndView

說明

  一旦Controller處理完客戶請求,則返回ModelAndView對象給DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和視圖(View)。從宏觀角度考慮,DispatcherServlet是整個Web應用的控制器;從微觀角度考慮,Controller是單個Http請求處理過程中的控制器,而ModelAndView是Http請求過程中返回的模型和視圖。
  即,控制器處理方法的返回值如果為ModelAndView,則其中既包含視圖信息,也包含模型數據信息

示例

  1.創建ModelAndView,並傳入模型數據  

  

  2.編寫JSP頁面,進行測試

  

說明:SpringMVC會把ModelAndView中的Model中的數據方法Request域對象中。 

Map及Model

說明: 

  Spring MVC 在內部使用了一個org.springframework.ui.Model 接口存儲模型數據。

  Spring MVC 在調用方法前會創建一個隱含的模型對象作為模型數據的存儲容器。

  如果方法的入參為 Map 或 Model 類型,Spring MVC 會將隱含模型的引用傳遞給這些入參在方法體內,開發者可以通過這個入參對象訪問到模型中的所有數據,也可以向模型中添加新的屬性數據。

示例:

  

使用MODEL:

  這里傳入的Map實際為BindingAwareModelMap,所以我們定義參數用Map即可。  

   

說明:

  並且在這里我們也是可以使用Model類型的。
  

@SessionAttribute

  若希望在多個請求之間共用某個模型屬性數據,則可以在控制器類上標注一個 @SessionAttributes,Spring MVC將在模型中對應的屬性暫存到 HttpSession 中。

 說明:

    注意這個注解只能放到類的上面

  1.首先使用Map將模型數據存到請求域中,然后在類定義處使用@SessionAttributes,拷貝到Session中。

  

  2.編寫JSP頁面及測試

  

  

補充

  @SessionAttributes 除了可以通過屬性名指定需要放到會話中的屬性外,還可以通過模型屬性的對象類型指定哪些模型屬性需要放到會話中
  – @SessionAttributes(types=User.class) 會將隱含模型中所有類型為 User.class 的屬性添加到會話中。
  – @SessionAttributes(value={“user1”, “user2”})
  – @SessionAttributes(types={User.class, Dept.class})
  – @SessionAttributes(value={“user1”, “user2”},types={Dept.class})

@ModelAttribute

說明:

  前面談到SpringMVC在每次調用請求處理方法時,都會創建Model類型的一個實例。如果准備使用此實例,則可以在方法中添加一個Model類型的參數。還可以使用在方法中添加@ModelAttribute注釋類型來訪問Model實例

  可以用@ModelAttribute來注釋方法參數:帶有@ModelAttribute注解的方法會將其輸入或創建的參數對象添加到Model對象中(若方法中沒有顯式添加)。

  可以用@ModelAttribute標注一個非請求的處理方法:被@ModelAttribute注釋的方法會在此controller每個方法執行前被執行。  

基本用法:

  1.在方法上使用@ModelAttribute

  @Controller
  public class UserDao{
    .....
    @ModelAttribute
    public User addUser(User user)
    {
        return new User(201702,"MrSaber");
    }
    .....
  }

說明:

 @ModelAttribute 注解的方法可以返回一個 對象或者一個void類型。如果返回一個對象則默認添加到Model中。若方法返回一個void類型,則還必須自行將實例添加到Model中。

 

  @Controller
  public class UserDao{
    .....
    @ModelAttribute
    public void addUser(User user,Model model)
    {
              ...
        model.addAttribute(user);
    }
    .....
  }    

  2.在方法參數上使用@ModelAttribute.

@RequestMapping("/save")  
public String save(@ModelAttribute("newUser") User user) {  
    user.setUsername("U love me");  
    userService.save(user);  
    return "result";  
} 

說明:

   輸入或創建的User實例將用newUser鍵值添加到Model對象中。如果未定義將默認用小寫名稱作為鍵。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM