thymeleaf介绍
Thymeleaf模板Spring boot 官方推荐使用来代替jsp,是一款用于渲染
XML / XHTML / HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻松的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个的Web应用它的功能特性如下:
将Spring MVC @Controller对象中的映射方法转发到由Thymeleaf管理的模板,就像使用JSP一样。
在模板中使用Spring表达式语言(Spring EL)而不是OGNL。在您的模板中创建与表单支持bean和结果绑定完全集成的表单,包括
使用属性编辑器,转换服务和验证错误处理。
从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
在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配置成功
标准表达式语法
简单表达式 (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;