美文网首页
Spring学习(六)渲染Web视图

Spring学习(六)渲染Web视图

作者: 木书 | 来源:发表于2017-11-16 16:53 被阅读35次

    一、创建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

    相关文章

      网友评论

          本文标题:Spring学习(六)渲染Web视图

          本文链接:https://www.haomeiwen.com/subject/zvufvxtx.html