thymeleaf是一个很容易扩展的库,大部分面向用户的功能不是直接构建在他的核心中,而是通过打包和组件化到一个称谓Dialect(方言)的功能集合中。
由于Spring-boot间接式的主推了thymeleaf模板,所以本文主要介绍下thymeleaf的一些扩展功能,尽管thymeleaf3的性能相比2来说提升了很大,但是相比别的,还是有一点差距。
方言(Dialects)
如果我们研究过thymeleaf的一些基础使用的话,应该能意识到我们之前了解的准确的说不是thymeleaf,而是thymeleaf的标准方言,例如th:text,仅仅只是可以立即使用的标准方言。
同时我们可以自定义一组attribute或者tag在thymeleaf中用来处理我们的模板。
Dialects是实现了org.thymeleaf.dialect.IDialect
接口的对象,具体如下:
public interface IDialect {
public String getName();
}
同时最基础的接口有:
* IProcessorDialect 处理器方言
* IPreProcessorDialect 预处理方言
* IPostProcessorDialect 后处理方言
* IExpressionObjectDialect 表达式对象方言
* IExecutionAttributeDialect 可执行属性方言
IProcessorDialect 处理器方言
参看接口代码
public interface IProcessorDialect extends IDialect {
public String getPrefix();
public int getDialectProcessorPrecedence();
public Set<IProcessor> getProcessors(final String dialectPrefix);
}
processor是负责执行thymeleaf模板中的大部分逻辑的对象。也是最重要的扩展方言。
定义了三个主要是属性方法。
* prefix 应用于匹配元素和属性的前缀,类似于th:if,thLtext中的th。如果希望处理器在未定义的标签或者属性上执行,则可以将prefix定义为null
* getDialectProcessorPrecedence 定义方言的优先级。
* getProcessors 定义一组由该方言提供的处理器集合。
IPreProcessorDialect 预处理方言
public interface IPreProcessorDialect extends IDialect {
public int getDialectPreProcessorPrecedence();
public Set<IPreProcessor> getPreProcessors();
}
预处理和后处理与处理器不同。处理器是在单个时间或者模板片段上执行。而预处理和后处理是作为引擎处理过程中的附加步骤,应用在整个模板的执行过程中。
因此他们遵循与处理器完成不同的API,他们更加面向事件。
预处理在特定的情况下,是在为特定模板执行处理器之前应用的。后处理器则相反,是在执行处理器之后应用。
IPostProcessorDialec 后处理方言
public interface IPostProcessorDialect extends IDialect {
public int getDialectPostProcessorPrecedence();
public Set<IPostProcessor> getPostProcessors();
}