Spring學習(六)渲染Web視圖

一、創建JSP視圖

  1. spring提供了兩種支持jsp視圖的方式:
  • InternalResourceViewResolver
    • InternalResourceViewResolver會將視圖名解析為JSP文件
    • 如果JSP頁面中使用了JSP標準標簽庫(JavaServer Pages Standard Tag Library, JSTL) 的話, InternalResourceViewResolver能夠將視圖名解析為JstlView形式的JSP文件, 從而將JSTL本地化和資源bundle變量暴露給JSTL的格式化(formatting) 和信息(message) 標簽。
  • Spring
    • Spring提供了兩個JSP標簽庫, 一個用于表單到模型的綁定, 另一個提供了通用的工具類特性。
  1. 配置適用于JSP的視圖解析器
  • java方式
     @Bean
      public ViewResolver viewResolver() {
      InternalResourceViewResolver resolver = new InternalResourceViewResolver();
      resolver.setPrefix("/WEB-INF/views/");
      resolver.setSuffix(".jsp");
      return resolver;
    }
    
  • xml方式
    <beans:bean
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <beans:property name="prefix" value="/WEB-INF/views/" />
      <beans:property name="suffix" value=".jsp" />
    </beans:bean>
    
    • home將會解析為“/WEB-INF/views/home.jsp”
    • productList將會解析為“/WEB-INF/views/productList.jsp”
    • books/detail將會解析為“/WEB-INF/views/books/detail.jsp”
  1. 解析JSTL視圖
    使用JSTL標簽來處理格式化和信息,需要InternalResourceViewResolver將視圖解析為JstlView,這需要設置InternalResourceViewResolver的viewClass屬性:
  • java方式
    @Bean
    public ViewResolver viewResolver() {
      InternalResourceViewResolver resolver = new InternalResourceViewResolver();
      resolver.setPrefix("/WEB-INF/views/");
      resolver.setSuffix(".jsp");
      resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
      return resolver;
    }
    
  • xml方式
    <beans:bean
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <beans:property name="prefix" value="/WEB-INF/views/" />
      <beans:property name="suffix" value=".jsp" />
      <beans:property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    </beans:bean>
    

4.使用spring的jsp庫

  • 將表單綁定到模型上

    Spring的表單綁定jsp標簽庫包含了14個標簽,它們中的大多數都用來渲染HTML中的表單標簽。為了使用它們,需要在jsp頁面中對其進行聲明:
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
    如果在模型中Spitter對象的firstName屬性值為Jack, 那么<sf:input path="firstName"/>所渲染的<input>標簽中, 會存在value="Jack"。

    展現錯誤
    <sf:errors path="*" element="div" cssClass="errors" />

  • spring通用的標簽庫
    要使用Spring通用的標簽庫, 我們必須要在頁面上對其進行聲明:
    <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>

    展現國際化信息
    借助<s:message>來渲染文本
    <s:message code="spitter.welcome" text="Welcome" />
    <s:message>將會根據key為spittr.welcome的信息源來渲染文本。
    
    配置信息源:
    spring中實現了MessageSource接口的類可以配置信息源,常用的有ResourceBundleMessageSource
    和ReloadableResourceBundleMessageSource
    java代碼:
    @Bean
    public MessageSource messageSource() {
      ReloadableResourceBundleMessageSource messageSource = 
          new ReloadableResourceBundleMessageSource();
    //ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
      messageSource.setBasename("classpath:///messages");
      messageSource.setCacheSeconds(10);
      return messageSource;
    }
    
    創建URL
    <s:url>及<s:param>的用法見p229頁
    
    轉義內容
    <s:escapeBody>標簽是一個通用的轉義標簽。它會渲染標簽體中內嵌的內容, 并且在必要的時候進行轉義:
    
    <s:escapeBody javaScriptEscape="true">
    <h1>Hello</h1>
    </s:escapeBody>
    
    <s:escapeBody htmlEscape="true">
    <h1>Hello</h1>
    </s:escapeBody>
    
    

二、使用Apache Tiles視圖定義布局

  1. 配置
  2. 使用

三、使用Thymeleaf

  1. 配置
  • 在spring中配置三個bean:

    ThymeleafViewResolver:將邏輯視圖名稱解析為Thymeleaf模板視圖;
    SpringTemplateEngine:處理模板并渲染結果;
    TemplateResolver:加載Thymeleaf模板。

  • java配置
    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
      ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
      viewResolver.setTemplateEngine(templateEngine);
      return viewResolver;
    }
    @Bean
    public SpringTemplateEngine templateEngine(TemplateResolver templateResolver) {
      SpringTemplateEngine templateEngine = new SpringTemplateEngine();
      templateEngine.setTemplateResolver(templateResolver);
      return templateEngine;
    }
    @Bean
    public TemplateResolver templateResolver() {
      TemplateResolver templateResolver = new ServletContextTemplateResolver();
      templateResolver.setPrefix("/WEB-INF/views/");
      templateResolver.setSuffix(".html");
      templateResolver.setTemplateMode("HTML5");
      return templateResolver;
    }
    
  • xml配置
    xml配置Thymeleaf
  1. 使用
    略...見p240
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容