天天看點

modelAndView傳值給JSP

       modelAndView本質上即使 把傳入給它的值加入到request對象中,然後在相對應的jsp中使用EL表達式将值取出來展示或處理。

Spring mvc視圖機制

所有的web應用的mvc架構都有它定位視圖的方式。Spring提供了視圖解析器供你在浏覽器中顯示模型資料,而不必被拘束在特定的視圖技術上。

Spring的控制器Controller會傳回一個ModelAndView的執行個體。Spring根據ModelAndView執行個體中的View和Model把資訊回報給使用者。Spring中的視圖是以名字為辨別的,ViewResolver是通過名字來解析view的。Spring提供了多種視圖和視圖解析器。

A、ModelAndView

org.springframework.web.servlet.ModelAndView

public class ModelAndView extends Object

ModelAndView如其名稱所示,它代表了Spring Web MVC中呈現畫面時所使用的Model與View,由于Java一次隻能傳回一個物件,是以ModelAndView的作用封裝這兩個物件,以友善您一次傳回Model與View這兩個物件。

構造方法

ModelAndView(String viewName)

Convenient constructor when there is no model data to expose.

最簡單的ModelAndView是隻有View的名稱,之後View名稱被View resolver,也就是org.springframework.web.servlet.View的執行個體解析,例如 InternalResourceView或JstlView等等。

ModelAndView(String viewName, Map model)

Creates new ModelAndView given a view name and a model.

如果您要傳回呈現畫面時所需的Model資料,則可以使用Map來收集呈現View時所需的資料,然後在建構ModelAndView作為建構時的參數。

ModelAndView(String viewName, String modelName, Object modelObject)

Convenient constructor to take a single model object.

傳回單個model時使用。

B、ViewResolver(視圖解析器)

org.springframework.web.servlet.ViewResolver

public interface ViewResolver

現在我們有了view名稱,也有了顯示時需要的model資料,那麼我們如何顯示view了。這就需要用到ViewResolver,它提供了從視圖名稱到實際視圖的映射。

(例如我們得到的view名稱為test,通過ViewResolver我們把它映射到/WEB-INF/jsp/test.jsp的資源上,當然也可以把test映射到test.pdf的資源上,這部分工作由ViewResolver來完成,但是具體如何顯示test.jsp或test.pdf,就需要View來實作了)。