springMVC ModelAndView 作用與功能解析
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來實現了)。