1. 程式人生 > >SpringMVC處理模型數據

SpringMVC處理模型數據

自動添加 pri style tgui 多個 返回 success index 引用

模型數據放到域對象裏面(一般指請求域)

Spring mvc裏面有四種方法:

ModelAndView: 處理方法返回值類型為 ModelAndView時, 方法體即可通過該對象添加模型數據

Map 及 Model: 入參為org.springframework.ui.Model、org.springframework.ui. ModelMap 或 java.uti.Map 時,處理方法返回時,Map中的數據會自動添加到模型中。

@SessionAttributes: 將模型中的某個屬性暫存到HttpSession 中,以便多個請求之間可以共享這個屬性

@ModelAttribute: 方法入參標註該註解後, 入參的對象就會放到數據模型中

1、控制器處理方法的返回值如果為 ModelAndView, 則其既包含視圖信息,也包含模型數據信息。

jsp:

index:

<a href="springmvc/testModelAndView">Test ModelAndView</a>

success:

<h4>Sucess Page</h4>
    time: ${requestScope.time }
<br><br>

controller:

/**
     * 目標方法的返回值可以是 ModelAndView 類型。 
     * 其中可以包含視圖和模型信息
     * SpringMVC 會把 ModelAndView 的 model 中數據放入到 request 域對象中. 
     * 
@return */ @RequestMapping("/testModelAndView") public ModelAndView testModelAndView(){ String viewName = SUCCESS; //視圖的名字 ModelAndView modelAndView = new ModelAndView(viewName); //添加模型數據到 ModelAndView 中. modelAndView.addObject("time", new Date());
return modelAndView; }

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

步驟是這樣的:

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

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

技術分享圖片

index.jsp:

<a href="springmvc/testMap">Test Map</a>

success.jsp:

names: ${requestScope.names }

controller:

/**
     * 目標方法可以添加 Map 類型(實際上也可以是 Model 類型或 ModelMap 類型)的參數. 
     * @param map
     * @return
     */
    @RequestMapping("/testMap")
    public String testMap(Map<String, Object> map){
        System.out.println(map.getClass().getName()); 
        map.put("names", Arrays.asList("Tom", "Jerry", "Mike"));
        return SUCCESS;
    }

上面的參數把模型數據放在請求域裏

下面放在session域

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

@SessionAttributes 除了可以通過屬性名指定需要放到會話中的屬性外,還可以通過模型屬性的對象類型指定哪些 模型屬性需要放到會話中

index.jsp:

<a href="springmvc/testSessionAttributes">Test SessionAttributes</a>

success.jsp:

    request user: ${requestScope.user }
    <br><br>
    
    session user: ${sessionScope.user }
    <br><br>
    
    request school: ${requestScope.school }
    <br><br>
    
    session school: ${sessionScope.school }
    <br><br>

controller中:

控制器上面加@SessionAttributes 有兩個屬性值 既放在請求域 又放在 Session域裏面 value裏面可以放多個key的名字 還可以放class類型的參數 這裏spring類型的也會有同樣的存放效果

技術分享圖片

    /**
     * @SessionAttributes 除了可以通過屬性名指定需要放到會話中的屬性外(實際上使用的是 value 屬性值),
     *                                     還可以通過模型屬性的對象類型指定哪些模型屬性需要放到會話中(實際上使用的是 types 屬性值)
     * 
     * 註意: 該註解只能放在類的上面. 而不能修飾放方法. 
     */
    @RequestMapping("/testSessionAttributes")
    public String testSessionAttributes(Map<String, Object> map){
        User user = new User("Tom", "123456", "[email protected]", 15);
        map.put("user", user);
        map.put("school", "atguigu");
        return SUCCESS;
    }

SpringMVC處理模型數據