springmvc處理模型數據

原文連接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/java

springmvc處理模型數據

不少狀況下頁面上須要不少數據,單單返回頁面是不行的,那麼springmvc如何將數據返回到該頁面呢spring

springmvc提供了四種方式來輸出模型數據session

  • ModelAndView: 處理返回值爲ModelAndView時,能夠將該對象中添加數據模型
  • Map及Model:入參爲Model、ModelMap或Map時,處理方法返回時,Map中的數據會自動添加到模型中
  • @SessionAttributes: 將模型中的某個屬性暫存到HttpSession中,以便多個請求之間共享數據
  • @ModelAttribute: 方法入參標註該註解後,入參的對象就會放到數據模型中

ModelAndView

主要有兩個重要的變量mvc

// 視圖  能夠傳字符串(視圖名字)也能夠傳View對象
private Object view;
// 數據模型 本質是一個map
private ModelMap model;

視圖相關的方法app

// 設置視圖
public void setViewName(String viewName) {
    this.view = viewName;
}
// 獲取視圖
public String getViewName() {
    return this.view instanceof String ? (String)this.view : null;
}

數據模型相關方法this

// 獲取數據模型
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)來將數據放入到請求中code

示例:對象

@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={"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.icuget

相關文章
相關標籤/搜索