原文鏈接http://zhhll.icu/2021/01/07/%E6%A1%86%E6%9E%B6/springmvc/springmvc%E5%A4%84%E7%90%86%E6%A8%A1%E5%9E%8B%E6%95%B0%E6%8D%AE/
springmvc處理模型資料
很多情況下頁面上需要很多資料,單單回傳頁面是不行的,那么springmvc如何將資料回傳到該頁面呢
springmvc提供了四種方式來輸出模型資料
- ModelAndView: 處理回傳值為ModelAndView時,可以將該物件中添加資料模型
- Map及Model:入參為Model、ModelMap或Map時,處理方法回傳時,Map中的資料會自動添加到模型中
- @SessionAttributes: 將模型中的某個屬性暫存到HttpSession中,以便多個請求之間共享資料
- @ModelAttribute: 方法入參標注該注解后,入參的物件就會放到資料模型中
ModelAndView
主要有兩個重要的變數
// 視圖 可以傳字串(視圖名字)也可以傳View物件
private Object view;
// 資料模型 本質是一個map
private ModelMap model;
視圖相關的方法
// 設定視圖
public void setViewName(String viewName) {
this.view = viewName;
}
// 獲取視圖
public String getViewName() {
return this.view instanceof String ? (String)this.view : null;
}
資料模型相關方法
// 獲取資料模型
protected Map<String, Object> getModelInternal() {
return this.model;
}
public ModelMap getModelMap() {
if (this.model == null) {
this.model = new ModelMap();
}
return this.model;
}
public Map<String, Object> getModel() {
return this.getModelMap();
}
// 添加視圖模型
public ModelAndView addObject(String attributeName, Object attributeValue) {
this.getModelMap().addAttribute(attributeName, attributeValue);
return this;
}
springmvc底層使用request.setAttribute(name,value)來將資料放入到請求中
示例:
@RequestMapping("/modelAndViewTest")
public ModelAndView modelAndViewTest(){
// 視圖名
ModelAndView modelAndView = new ModelAndView("modelAndViewTest");
// 包含的資料
modelAndView.addObject("dateTime",new Date());
return modelAndView;
}
Map及Model
@RequestMapping("/mapTest")
public String mapTest(Map<String,String> map){
System.out.println(map.getClass()); //class org.springframework.validation.support.BindingAwareModelMap
map.put("name","張三");
return "hello";
}
@SessionAttributes
在類上添加@SessionAttributes可以使該類所代表的路徑下的session共享
@Controller
@RequestMapping("helloWorld")
// 設定name屬性共享
@SessionAttributes(value=https://www.cnblogs.com/life-time/p/{"name"})
public class HelloWorldController {
@RequestMapping("/mapTest")
public String mapTest(Map<String,String> map){
System.out.println(map.getClass()); //class org.springframework.validation.support.BindingAwareModelMap
map.put("name","張三");
return "hello";
}
// 可以在該方法中獲取到name值為張三
@RequestMapping("/sessionAttributes")
public String sessionAttributes(HttpSession session){
System.out.println(session.getAttribute("name"));
return "hello";
}
}
由于本身的博客百度沒有收錄,博客地址http://zhhll.icu
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265539.html
標籤:Java
下一篇:執行緒問題怎么排查
