一點一滴學習Spring(六)之Spring MVC視圖解析器

渲染Web視圖

Spring自帶的13個視圖解析器
視圖解析器:描述
BeanNameViewResolver:將視圖解析爲Spring應用上下文的bean,其中Bean的ID與視圖名稱相同
ContentNegotiatingViewResolver:通過考慮客戶端需要的內容類型來解析視圖,委託給另一個能產生對應內容類型的視圖解析器
FreeMarkerViewResolver:將視圖解析爲FreeMarker模板
InternalResourceViewResolver:將視圖解析爲Web應用的內部資源(一般爲jsp)
JasperReportsViewResolver:將視圖解析爲JasperReports定義
ResourceBundleViewResolver:將視圖解析爲資源bundle(一般爲屬性文件)
TilesViewResolver:將視圖解析爲Apache Tiles定義,其中tiles ID與視圖名稱相同。
注意兩個不同的TilesViewResolver實現,分別對應Tiles2.0和Tiles3.0,Spring3.2及以上才支持
UrlBasedViewResolver:直接根據視圖的名稱解析視圖,視圖名稱會匹配一個物理視圖的定義
VelocityViewResolver:將視圖解析爲Velocity佈局,從不同的Velocity模板中組合頁面
XmlViewResolver:將視圖解析爲特定的XML文件中bean定義,類似於BeanNameViewResolver
XsltViewResolver:將視圖解析爲XSLT轉換後的結果

配置適用於JSP的視圖解析器

在使用@Bean註解的是偶,我們可以按照如下方式配置InternalResourceViewResolver
//配置視圖解析器

@Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver resolver = 
                new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

若使用xml的Spring配置,那麼可以按照如下的方式配置InternalResourceViewResolver

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/views/" p:suffix="jsp" />

解析JSTL視圖

到目前爲止,我們對InternalResourceViewResolver的配置都很基礎和簡單。他最終會將邏輯視圖名解析爲InternalResourceView實例,這個實例會引用JSP文件。但是如果這些JSP使用JSTL標籤來處理格式化和信息的話,麼我們會希望InternalResourceViewResolver將視圖解析爲JstlView。
如果想讓InternalResourceViewResolver將視圖解析爲JstlView,而不是InternalResourceView的話,那麼我們只需要設置特德viewClass屬性即resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
若是xml配置
添加:p:viewClass=”org.springframework.web.servlet.view.JstlView”

配置Thymeleaf視圖解析器

爲了在Spring中使用Thymeleaf,我們需要配置三個啓用Thymeleaf與Spring集成的bean:
ThymeleafViewResolver:將邏輯視圖名稱解析爲Thymeleaf模板視圖
SpringTemplateEngine:處理模板並渲染結果
TemplateResolver:加載Thymeleaf模板

配置如下:
//配置Thymeleaf視圖解析器

@Bean
    public ViewResolver viewResolver(SpringTemplateEngine springTemplateEngine){
        ThymeleafViewResolver thymeleafViewResolver
                                    = new ThymeleafViewResolver();
        thymeleafViewResolver.setTemplateEngine(springTemplateEngine);
        return thymeleafViewResolver;
    }


    @Bean
    public TemplateResolver templateResolver(){
        ServletContextTemplateResolver
                    resolver = new ServletContextTemplateResolver();
        resolver.setPrefix("/WEB-INF/thymeleaf/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        resolver.setCacheable(false);
        return resolver;
    }

    @Bean
    public SpringTemplateEngine springTemplateEngine(TemplateResolver templateResolver){
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver);
        return engine;
    }

使用的jar
javassist-3.12.1.GA.jar、slf4j-api-1.7.21.jar、thymeleaf-2.0.16.jar、thymeleaf-spring3-2.0.21.jar

簡單的頁面

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:th="http://www.thymeleaf.org">
  <head>
    <title>Content page 1</title>
  </head>
  <body>
    dfsaa
  </body>
</html>
發佈了45 篇原創文章 · 獲贊 22 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章