美文网首页SpringFramework
thymeleaf学习日志

thymeleaf学习日志

作者: 神易风 | 来源:发表于2018-01-14 13:09 被阅读69次

thymeleaf介绍

Thymeleaf模板Spring boot 官方推荐使用来代替jsp,是一款用于渲染
XML / XHTML / HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻松的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个的Web应用它的功能特性如下:

  1. 将Spring MVC @Controller对象中的映射方法转发到由Thymeleaf管理的模板,就像使用JSP一样。

  2. 在模板中使用Spring表达式语言(Spring EL)而不是OGNL。在您的模板中创建与表单支持bean和结果绑定完全集成的表单,包括

  3. 使用属性编辑器,转换服务和验证错误处理。

  4. 从Spring管理的消息文件中显示国际化消息(通过通常的MessageSource对象)。

环境的搭建

使用maven构建项目 pox.xml配置:

 <properties>
        <spring.version>4.3.6.RELEASE</spring.version>
        <servlet.version>3.1.0</servlet.version>
        <jsp.version>2.3.1</jsp.version>
        <jstl.version>1.2</jstl.version>
        <lombok.version>1.16.18</lombok.version>
        <fastjson.version>1.2.44</fastjson.version>
        <thymeleaf.version>3.0.8.RELEASE</thymeleaf.version>
    </properties> 

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- servlet api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
        </dependency>

    
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>${thymeleaf.version}</version>
        </dependency>
        
        <dependency>
           <groupId>org.thymeleaf</groupId>
           <artifactId>thymeleaf-spring4</artifactId>
           <version>${thymeleaf.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <warSourceDirectory>src/main/webapp</warSourceDirectory>
                        <warName>mvc</warName>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <finalName>mvc</finalName></build>

springmvc配置thymeleaf 基于javaconfig方式配置


import java.util.List;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.TemplateResolution;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;

@Configurable
@EnableWebMvc
@ComponentScan("com.ting.springmvc.config")
public class WebAppServletConfigureion extends WebMvcConfigurerAdapter implements ApplicationContextAware{`
    
    private ApplicationContext applicationContext;
    
    
    public ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    /**
     * thymeleaf 视图解析器
     * @return
     */
    @Bean
    public ViewResolver viewResolve() {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setOrder(1);
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }
    
    /**
     * 模板解析引擎
     * @return
     */
    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setApplicationContext(this.applicationContext);
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCacheable(false);
        return templateResolver;
    }
    /**
     * 模板引擎
     * @param templeateResolver
     * @return
     */
    @Bean
    public TemplateEngine templateEngine() {
       SpringTemplateEngine templateEngine = new SpringTemplateEngine();
       templateEngine.setTemplateResolver(templateResolver());
       templateEngine.setEnableSpringELCompiler(true);
       return templateEngine;
    }
    /*@Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new 
                 InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/view/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }*/

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        // TODO Auto-generated method stub
        //配置静态资源的处理
        configurer.enable();
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(converter());
    }
    
    @Bean
    public FastJsonHttpMessageConverter converter() {
        FastJsonHttpMessageConverter converter = new 
                FastJsonHttpMessageConverter();
        List<MediaType> list = new ArrayList<>();
        list.add(MediaType.APPLICATION_JSON_UTF8);
        list.add(MediaType.TEXT_HTML);
        converter.setSupportedMediaTypes(list);
        converter.setDateFormat("yyyy-MM-dd HH:mm:ss");
        converter.setFeatures(SerializerFeature.WriteNullStringAsEmpty
                ,SerializerFeature.WriteMapNullValue);
        return converter;
    }
    
}

在WEB-INF/templates/下创建index.html


图片.png

在html添加点内容,测试配置构建是否成功

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>配置测试</title>
</head>
<body>
   <h1>hello thymeleaf </h1>
   <h2>测试中文</h2>
   <h3 th:text="${ting}"/>
</body>
</html>

在controller 添加方法index方法,跳转页面到index.html中


    @GetMapping("index")
    public String index(Model model) {
        model.addAttribute("ting", "数据域测试");
        return "index";
    }

打开浏览器方法访问index的url,看见出现下图,表示springmvc+thymeleaf配置成功


图片.png

标准表达式语法

简单表达式 (simple expressions)

${...} 变量表达式

*{...} 选择变量表达式

#{...} 消息表达式

@{...} 链接url表达式

thymeleaf简单功能介绍

遍历
 <ul>
    <th:block th:each="str , strStat: ${list}">
     <li th:text="${str}">列表/li>
     </th:block>
   </ul>

str是list遍历生成的局部变量,strStat是状态变量,如果不写的话,默认值就是${局部变量值}+Stat
1. index:当前迭代对象的index(从0开始计算)
2. count: 当前迭代对象的index(从1开始计算)
3. size:被迭代对象的大小
4. current:当前迭代变量
5. even/odd:布尔值,当前循环是否是偶数/奇数(从0开始计算)
6. first:布尔值,当前循环是否是第一个
7. last:布尔值,当前循环是否是最后一个

格式化
 <p th:text="${#calendars.format(today,'yyyy-MM-dd HH:mm:ss')}">时间</p>
<span th:text="${#numbers.formatDecimal(money, 0, 2)}">保留两位小数</span>
条件表达式
  <div th:if="${ifs}">
      <span>wei真就可以展示内容</span>
   </div>

th:if不仅判断返回为true的表达式,还判断一些特殊的表达式。

如果值非NULL得话返回true:
    如果值是boolean类型并为TURE.
    如果值是数值型并不为0.
    如果值是字符型并不为空.
    如果值是字符型并且内容不为“false”, “off” 或者 “no”。
    如果值不是上述类型。
如果值是NULL得话返回false;

相关文章

  • thymeleaf学习日志

    thymeleaf介绍 Thymeleaf模板Spring boot 官方推荐使用来代替jsp,是一款用于渲染XM...

  • thymeleaf学习的坑

    thymeleaf学习的坑

  • 2. Spring Boot 编写 Controller

    说明 这篇日志需要使用页面模版,这里选用 thymeleaf,在 pom.xml 中 ...

  • springboot整合Thymeleaf

    springboot不推荐使用jsp, 所以我们这里学习下Thymeleaf。 为什么选择Thymeleaf? 动...

  • Thymeleaf学习

    Thymeleaf简介 前两天学习springboot遇到了thymeleaf,本着不懂就学的原则,网上查资料了解...

  • Thymeleaf 学习

    Thymeleaf 简介:java模板引擎。能够处理HTML、XML、JAVAScript、Css 甚至纯文本。类...

  • Thymeleaf学习

    th:fragment即代码片段,用于另外的引用 具体的使用方法如下:_header.html: _index.h...

  • Thymeleaf学习

    Thymeleaf 介绍 Thymeleaf是一种用于Web和独立环境的现代服务器端的Java模板引擎。Thyme...

  • thymeleaf学习

    表达式 设置属性 迭代器 条件语句 模板布局 属性优先级 注释 内联 基本对象 thymeleaf实战API设计

  • # SpringBoot thymeleaf基本使用

    thymeleaf的优点就不说了,相信大家既然来学习Thymeleaf,肯定对jsp的使用深有体会,现在开始步入正...

网友评论

    本文标题:thymeleaf学习日志

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