pom.xml配置:
<dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>3.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring4</artifactId> <version>3.0.0.RELEASE</version> </dependency>
spring-service.xml配置:
<!--thymeleaf--> <!--字符串解析器--> <bean id="stringTemplateResolver" class="org.thymeleaf.templateresolver.StringTemplateResolver"> <property name="cacheable" value="true"/> </bean> <!--字符串模板引擎对象--> <bean id="springTemplateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine"> <property name="templateResolver" ref="stringTemplateResolver"/> </bean>
测试:
package com.tencent.fit.recommend.console.controller;
import com.tencent.fit.fdp.infrastructure.msg.Message;
import com.tencent.fit.recommend.console.controller.base.BaseController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring4.SpringTemplateEngine;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 测试 纯文本的文本模板
*
* @author v_jingwen 2020-01-06
*
*/
@Controller
@RequestMapping(value = "/testT")
public class TestThymeleafController extends BaseController {
private final static Logger logger = LoggerFactory.getLogger(TestThymeleafController.class);
@Autowired
private SpringTemplateEngine springTemplateEngine;
@RequestMapping(value="/testThymeleaf.do")
@ResponseBody
public Message<Object> testThymeleaf(HttpServletRequest request, HttpServletResponse response){
Message<Object> message = new Message<Object>();
String template ="姓名:[(${name})]<br/>性别:[(${sex})]";
Context context = new Context();
context.setVariable("name", "橙小七");
context.setVariable("sex", "女");
String build = springTemplateEngine.process(template,context);
System.out.println("解析后:"+build);
return message;
}
}
控制台输出:
解析后:姓名:橙小七<br/>性别:女
参考资料:
1、https://www.cnblogs.com/jiangbei/p/8462294.html
2、https://www.thymeleaf.org/doc/articles/thymeleaf3migration.html

3、https://raledong.gitbooks.io/using-thymeleaf/content/Chapter13/section13.1.html
4、https://www.jianshu.com/p/19190c7dd42e
扩展:
工作中遇到一个对模板中的日期进行比较个性化的需求:
要求:
1、模板中的数据时间要能支持用户自定义格式。
2、模板中的数据时间要能支持时间加减操作,比如数据时间如果是2020年01月08日,例如-3d,就要在数据时间的基础上再回滚3天。
解决:
1、采用temporals的内置对象#dates来做时间格式化。
template = "[(${#dates.format(#dates.createToday(), 'yyyy-MM-dd HH:mm:ss')})]";
解析后:2020-01-09 00:00:00
2、thymeleaf支持调用java中的方法,使用org.apache.commons.lang3.time.DateUtils实现时间加减。
参考资料:https://stackoverflow.com/questions/42020634/java-thymeleaf-how-get-next-date
POM:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
更改模板字符串:当前日期为固定的-内置对象dates的,使在当前日期(2020-01-09)的基础上+5天。
tips:在模板文件的表达式中,可以使用“${T(全限定类名).方法名(参数)}”这种格式来调用Java类的静态方法。
template = "[(${#dates.format(T(org.apache.commons.lang3.time.DateUtils).addDays(#dates.createToday(), 5), 'yyyy-MM-dd')})]";
解析后:2020-01-14
更改模板字符串:当前日期为可变的入参,使在入参的基础上+5天。
备注:入参日期为 当前日期即为2020-01-13。
package com.tencent.fit.recommend.console.controller; import com.tencent.fit.fdp.infrastructure.msg.Message; import com.tencent.fit.recommend.console.controller.base.BaseController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.thymeleaf.context.Context; import org.thymeleaf.spring4.SpringTemplateEngine; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.sql.Timestamp; import java.util.Date; /** * 测试 纯文本的文本模板 * * @author v_jingwen 2020-01-06 * */ @Controller @RequestMapping(value = "/testT") public class TestThymeleafController extends BaseController { private final static Logger logger = LoggerFactory.getLogger(TestThymeleafController.class); @Autowired private SpringTemplateEngine springTemplateEngine; @RequestMapping(value="/testThymeleaf.do") @ResponseBody public Message<Object> testThymeleaf(HttpServletRequest request, HttpServletResponse response){ Message<Object> message = new Message<Object>(); String template = "[(${#dates.format(T(org.apache.commons.lang3.time.DateUtils).addDays(date, 5), 'yyyy-MM-dd HH:mm:ss')})]"; Context context = new Context(); Timestamp dataTime = new Timestamp(System.currentTimeMillis()); Date date = new Date(dataTime.getTime()); context.setVariable("date", date); String build = springTemplateEngine.process(template,context); System.out.println("解析后:"+build); return message; } }
解析后:2020-01-18 10:55:37
3、thymeleaf支持调用java中的方法,使用Java8新的日期时间LocalDateTime类实现时间加减及格式化。
更改模板字符串:当前日期为固定的-LocalDateTime类的,使在当前日期(2020-01-10)的基础上-5月。
template = "[(${T(java.time.LocalDateTime).now().plusMonths(-5).format(T(java.time.format.DateTimeFormatter).ofPattern( 'yyyy-MM-dd'))})]";
解析后:2019-08-10
更改模板字符串:当前日期为可变的入参,使在入参的基础上-5月。
备注:入参日期为 当前日期即为2020-01-10。
package com.tencent.fit.recommend.console.controller; import com.tencent.fit.fdp.infrastructure.msg.Message; import com.tencent.fit.recommend.console.controller.base.BaseController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.thymeleaf.context.Context; import org.thymeleaf.spring4.SpringTemplateEngine; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.sql.Timestamp; /** * 测试 纯文本的文本模板 * * @author v_jingwen 2020-01-06 * */ @Controller @RequestMapping(value = "/testT") public class TestThymeleafController extends BaseController { private final static Logger logger = LoggerFactory.getLogger(TestThymeleafController.class); @Autowired private SpringTemplateEngine springTemplateEngine; @RequestMapping(value="/testThymeleaf.do") @ResponseBody public Message<Object> testThymeleaf(HttpServletRequest request, HttpServletResponse response){ Message<Object> message = new Message<Object>(); String template = "[(${T(java.time.LocalDateTime).ofInstant(dataTime.toInstant(),T(java.time.ZoneId).systemDefault()).plusMonths(-5).format(T(java.time.format.DateTimeFormatter).ofPattern( 'yyyy-MM-dd HH:mm:ss'))})]"; Context context = new Context(); Timestamp dataTime = new Timestamp(System.currentTimeMillis()); context.setVariable("dataTime", dataTime); String build = springTemplateEngine.process(template,context); System.out.println("解析后:"+build); return message; } }
解析后:2019-08-10 17:59:14
浙公网安备 33010602011771号