thymeleaf自定义工具对象
2017-11-02 11:24
537 查看
Thymeleaf还提供了一系列Utility对象,通过#来访问,比如strings,dates等等,但在一些特殊的情况下,内置的对象并不能满足我们的使用。所以本文主要介绍下如何自定义工具对象表达式。
首先,通过继承AbstractDialect来定义一个dialect对象。
通过实现IExpressionObjectDialect接口,可以完成自定义的工具对象的工厂类。
在这里 我们定义了一个表达式对象的工厂类,主要用来提供我们后续将要继承的工具对象,比如StringUtils.
通过实现IExpressionObjectFactory接口来完成表达式对象工厂类的定义。
该接口提供了以下方法
接下来看下WorkFocusExpressionFactory类的具体的实现:
addDialect方法将我们自定义的方言WorkFocusDialect添加到模板引擎中,然后我们就可以在模板中通过
如果使用的是SpringBoot,并且有使用spring-boot-starter-thymeleaf的话,只需要配置该方言对象即可。
想了解具体为什么不需要通过addDialect方法来添加的话,可以查看Spring-boot的源码中的ThymeleafAutoConfiguration类。
简介
在thymeleaf中,提供了很多的工具对象来帮助我们完成一些常规的操作,比如#uris,#strings,#numbers等,我个人把他们定义为工具对象,可能定义的不太准确。简单点说也就是我们项目中比较常用的一些工具类了,比如google.guave,commons-lang等等。接下来,就讲下如何在thymeleaf中使用commons-lang中的StringUtils类。定义Dialect
我们接触到的Dialect有StandardDialect,以及SpringStandardDialect。如何仔细研究这两个类的话,那么基本上也就可以完成自定义工具对象的操作了。首先,通过继承AbstractDialect来定义一个dialect对象。
public class WorkFocusDialect extends AbstractDialect implements IExpressionObjectDialect { ... }
通过实现IExpressionObjectDialect接口,可以完成自定义的工具对象的工厂类。
private final IExpressionObjectFactory EXPRESSION_OBJECTS_FACTORY = new WorkFocusExpressionFactory(); @Override public IExpressionObjectFactory getExpressionObjectFactory() { return this.EXPRESSION_OBJECTS_FACTORY; }
在这里 我们定义了一个表达式对象的工厂类,主要用来提供我们后续将要继承的工具对象,比如StringUtils.
定义IExpressionObjectFactory
public class WorkFocusExpressionFactory implements IExpressionObjectFactory { ... }
通过实现IExpressionObjectFactory接口来完成表达式对象工厂类的定义。
该接口提供了以下方法
// 返回该工厂类能创建的工具类对象的集合。 public Set<String> getAllExpressionObjectNames(); // 根据表达式的名称,创建工具类对象 public Object buildObject(final IExpressionContext context, final String expressionObjectName); // 返回该工具对象是否可缓存。(可能理解的不太到位) public boolean isCacheable(final String expressionObjectName);
接下来看下WorkFocusExpressionFactory类的具体的实现:
public static final String STRING_UTILS_EXPRESSION_OBJECT_NAME = "stringUtils"; private static final StringUtils stringUtils = new StringUtils(); public static final Set<String> ALL_EXPRESSION_OBJECT_NAMES; static { final Set<String> allExpressionObjectNames = new LinkedHashSet<String>(); allExpressionObjectNames.add(STRING_UTILS_EXPRESSION_OBJECT_NAME); ALL_EXPRESSION_OBJECT_NAMES = Collections.unmodifiableSet(allExpressionObjectNames); } public WorkFocusExpressionFactory(){ super(); } @Override public Set<String> getAllExpressionObjectNames() { return ALL_EXPRESSION_OBJECT_NAMES; } @Override public Object buildObject(IExpressionContext context, String expressionObjectName) { return STRING_UTILS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName) ? stringUtils : null; } public boolean isCacheable(String expressionObjectName) { return expressionObjectName != null && "stringUtils".equals(expressionObjectName); }
最后将自定义的Dialect添加到模板引擎中。
@Bean public SpringTemplateEngine templateEngine(){ SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver()); templateEngine.addDialect(new WorkFocusDialect()); return templateEngine; }
addDialect方法将我们自定义的方言WorkFocusDialect添加到模板引擎中,然后我们就可以在模板中通过
#stringUtils.isEmpty(str)来完成对StringUtils类的调用。
如果使用的是SpringBoot,并且有使用spring-boot-starter-thymeleaf的话,只需要配置该方言对象即可。
@Bean @ConditionalOnMissingBean public WorkFocusDialect wlfDialect() { return new WorkFocusDialect(); }
想了解具体为什么不需要通过addDialect方法来添加的话,可以查看Spring-boot的源码中的ThymeleafAutoConfiguration类。
相关文章推荐
- javascript之自定义数组工具对象
- 扫描识别工具Dynamic Web TWAIN使用教程:如何自定义Web TWAIN对象
- 使用RabbitMQ放置自定义对象(不借助序列化工具,例如protobuffer)V2.0
- javascript之自定义数组工具对象
- Thymeleaf系列四 生成URL地址和表达式工具对象
- Thymeleaf 之 内置对象、定义变量、URL参数及标签自定义属性
- Thymeleaf 之 内置对象、定义变量、URL参数及标签自定义属性
- handlebars获取json数据(集合对象)及各种自定义helper数据格式化工具
- Android Activity间传自定义对象,Parcel代码自动生成工具
- Java Web+GeoTools工具+自定义几何对象构造器+简单应用
- Thymeleaf 之 内置对象、定义变量、URL参数及标签自定义属性
- Thymeleaf 之 内置对象、定义变量、URL参数及标签自定义属性
- 自定义超实用Redis工具类(满足对象,list,map等类型)
- Thymeleaf教程 (十三) 附件:工具对象用法
- java fastjson如何自定义转换含枚举类型对象(编程技巧)
- 集合框架(List存储自定义对象并遍历)
- 如何自定义一个Remoting中Sink对象实现特定协议上的消息转发
- 给初学者:VB如何操作WEB页的浏览提交———九:给感觉看HTML代码去找对应对象费劲的朋友的工具
- Web自定义表单工具和协同办公系统之集成(1)
- hibernate执行SQL返回自定义Bean对象