Thymeleaf为了方便扩展,定义了方言Dialect这个概念与组件。综合我个人的理解,简而言之方言就是Thymeleaf用于渲染文件的处理器Processor以及表达式Expression的集合体。
当模板为HTML时,处理器Processor处理的是具体标签Tag的内容。其他格式的模板暂还没有使用到。
Thymeleaf本身提供了StandardDialect
,以及结合了Spring之后提供的SpringStandardDialect
。Thymeleaf默认的语法 th:if
等,就是定义在了StandardDialect
中,th
为方言的前缀,if
为方言的处理器名称。
StandardDialect
的源代码中定义了如下的内容:
public class StandardDialect
extends AbstractProcessorDialect
implements IExecutionAttributeDialect, IExpressionObjectDialect {
public static final String NAME = "Standard";
public static final String PREFIX = "th";
public static final int PROCESSOR_PRECEDENCE = 1000;
...
其中的 PREFIX = "th"
定义了在模板中使用时,需要以 th:XX
的形式调用。
详细的接口介绍,可以查看:官方文档 ,本篇文章中暂不进行介绍。
先按照源代码的实例,进行我们自己的方言与表达式的编写。
创建 processor
自定义的处理器,分为几种,此次先使用 IElementProcessor
接口,此接口为元素Element处理的基础接口。
但官方建议一般不要直接实现此接口实现我们自己的处理器,而是继承抽象类 AbstractAttributeTagProcessor
。
public class CodeValueProcessor extends AbstractAttributeTagProcessor {
private static final String ATTR_NAME = "codeValue";
private static final int PRECEDENCE = 12000;
public CodeValueProcessor(final String dialectPrefix) {
super(
TemplateMode.HTML