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

posted on 2020-01-06 11:13  半纸情书  阅读(888)  评论(0)    收藏  举报