spring viewResolver 类别
?http://www.blogjava.net/Steven-bot/articles/361334.html
?
Spring web MVC 框架學習筆記 之 ViewResolver技術
ModelAndView對象中的view對象,可以使用字符串來讓Spring框架進行解析獲得適合的視圖。而解析View的就是ViewResolver技術。
ViewResolver的定義如下:
public interface ViewResolver {View resolveViewName(String viewName, Locale locale) throws Exception;} ? 在[spring-dispatcher-name]-servlet.xml中,可以定義viewResolver:<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
??????? <property name="prefix" value="/jsp/"/>
??????? <property name="suffix" value=".jsp"/>
??? </bean>
來讓DispacherServlet進行加載默認的viewResolver,如果沒有設置viewResolver,spring使用InternalResourceViewResolver進行解析。
Spring實現ViewResolver的非抽象類且我們經常使用的viewResolver有以下四種:
| InternalResourceViewResolver | 將邏輯視圖名字解析為一個路徑 |
| BeanNameViewResolver | 將邏輯視圖名字解析為bean的Name屬性,從而根據name屬性,找定義View的bean |
| ResourceBundleResolver | 和BeanNameViewResolver一樣,只不過定義的view-bean都在一個properties文件中,用這個類進行加載這個properties文件 |
| XmlViewResolver | 和ResourceBundleResolver一樣,只不過定義的view-bean在一個xml文件中,用這個類來加載xml文件 |
?
使用多視圖解析器:
我們不想只使用一種視圖解析器的話,可以在[spring-dispatcher-name]-servlet.xml定義多個viewResolver:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/jsp/"/><property name="suffix" value=".jsp"/></bean><bean id=”beanNameViewResolver” class=”...BeanNameViewResolver”><property name="order" value="1"></property></bean><bean id=”beanNameViewResolver” class=”...XmlViewResolver”><property name="order" value="0"></property></bean>DispatcherServlet會加載所有的viewResolver到一個list中,并按照優先級進行解析。注意order中的值越小,優先級越高。而id為viewResolver
的viewResolver的優先級是最低的。
?
=============
spring學習筆記:配置視圖解析器ViewResolver
分類: Springframework 2009-09-23 16:54 241人閱讀 評論(0) 收藏 舉報我們在controller里面經常這樣return一個ModelAndView: return new ModelAndView('user', 'model', model);
DispatcherServlet靠ViewResolver把user解析為/WEB-INF/jsp/user.jsp:
常用的ViewResolver:
InternalResourceViewResolver:
[xhtml] view plaincopyprint?其實InternalResourceViewResolver的工作很簡單: 在視圖邏輯名前面加上prefix,后面加上suffix;
ResourceBundleViewResolver:把視圖邏輯名和真實文件的映射關系放在配置文件中.
[xhtml] view plaincopyprint?因為可以配置多個viewResolver,所以上面的resolver還有一個選項order, 標明優先級。
views.properties放在classpath下面,內容大約是這樣的:
userDetail.class=org.springframework.web.servlet.view.JstlView
userDetail.url=/WEB-INF/jsp/userDetail.jsp
userList.class=org.springframework.web.servlet.view.JstlView
userList.url=/WEB-INF/jsp/userList.jsp
......
我們可以在controller里面這樣返回一個ModelAndView:
return new ModelAndView("userDetail","model", model);
?
=========Spring MVC中的視圖解析ViewResolver
分類: spring mvc學習筆記 2010-09-17 15:41 1172人閱讀 評論(0) 收藏 舉報??????? 在Spring MVC中,當Controller將請求處理結果放入到ModelAndView中以后,DispatcherServlet會根據ModelAndView選擇合適的視圖進行渲染。那么在Spring MVC中是如何選擇合適的View呢?View對象是是如何創建的呢?答案就在ViewResolver中,ViewResolver接口定義了resolverViewName方法,根據viewName創建合適類型的View實現。
??????? 那么,如何配置ViewResolver呢?在Spring中,ViewResolver作為Spring Bean存在,可以在Spring配置文件中進行配置,例如下面的代碼,配置了jsp相關的viewResolver。
[xhtml] view plaincopyprint??????? 在Spring MVC中,因為ViewResolver是使用bean來配置的,所以擴展起來非常的容易,可以根據自己的需要定制ViewResolver,然后在配置文件中進行相關的配置即可。
???????ViewResolver接口聲明了resolverViewName方法,這個方法的主要功能是根據ModelAndView中給定的viewName信息,再結合相關的配置,創建出合適類型的View對象。
???????ViewResolver接口是在DispatcherServlet中進行調用的,當DispatcherServlet調用完Controller后,會得到一個ModelAndView對象,然后DispatcherServlet會調用render方法進行視圖渲染。
[java] view plaincopyprint???????? 在DispatcherServlet類中,init方法中已經進行了相關的初始化,配置的ViewResolver信息都存放在viewResolvers中。在render方法中調用resolverViewName方法,在這個方法中逐一調用ViewResolver去取得View對象。
[java] view plaincopyprint???????? 在這里需要關于ViewResolver的選擇是通過循環進行的,只選擇第一個符合要求的,因此在定義ViewResolver時,需要注意定義其優先級。
????????下面就來著重關注一下ViewResolver的類結構。
?
?
?????? 關于View對象的創建,不同的ViewResolver的解決方法是各部相同的。如BeanNameViewResolver是根據viewName選擇相應名稱的bean(這里需要注意bean的scope,是否需要線程安全),而UrlBasedViewResolver則是使用反射機制,根據viewClass信息創建view對象,因此這個view不受IoC容器的管理。ContentNegotiationViewResolver中可以嵌套ViewResolver,根據不同的的請求類型選擇合適的ViewResolver。
?????? DispatcherServlet得到View對象后,即調用View的render方法,執行真正的渲染工作。
?????? 最后,看一下View的類結構圖。
?
?????? 有上述的View類結構圖可知,Spring已經為我們提供了一系列可用的View。同時,如果當前提供的View不能滿足我們的要求時,可以通過實現View接口進行擴展。如需要根據model中的數據使用JFreeChart繪圖,或者將這些數據作為文件下載時,我們可以擴展出JFreeChartView和FileDownloadView等,這樣就能更靈活的將同一份數據用不同的方式展現出來。
總結
以上是生活随笔為你收集整理的spring viewResolver 类别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring MVC 配置--解剖
- 下一篇: spring中的controller种类