视图解析
視圖解析
SpringMVC視圖解析
1、方法執行后的返回值會作為頁面地址參考,轉發或者重定向到頁面
2、視圖解析器可能會進行頁面地址的拼串;
1、任何方法的返回值,最終都會被包裝成ModelAndView對象
2、processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);來到頁面的方法
視圖渲染流程:將域中的數據在頁面展示;頁面就是用來渲染模型數據的;
3、調用render(mv, request, response);渲染頁面
4、View與ViewResolver;
? ? ?ViewResolver的作用是根據視圖名(方法的返回值)得到View對象;
5、怎么能根據方法的返回值(視圖名)得到View對象?
protected View resolveViewName(String viewName, Map<String, Object> model, Locale locale,HttpServletRequest request) throws Exception {//遍歷所有的ViewResolver;for (ViewResolver viewResolver : this.viewResolvers) {//viewResolver視圖解析器根據方法的返回值,得到一個View對象;View view = viewResolver.resolveViewName(viewName, locale);if (view != null) {return view;}}return null;}resolveViewName實現
返回View對象;
1、視圖解析器得到View對象的流程就是,所有配置的視圖解析器都來嘗試根據視圖名(返回值)得到View(視圖)對象;如果能得到就返回,得不到就換下一個視圖解析器;
2、調用View對象的render方法;
?
InternalResourceView有這個方法renderMergedOutputModel;
?
將模型中的所有數據取出來全放在request域中
一句話:
視圖解析器只是為了得到視圖對象;視圖對象才能真正的轉發(將模型數據全部放在請求域中)或者重定向到頁面
視圖對象才能真正的渲染視圖;
總結
- 上一篇: SpringMVC源码——未完待续
- 下一篇: 视图解析jstlView支持便捷的国际化