6. 扩展功能
6.1. EL表达式:SpingEL
Spring Expression Language (SpEL)是一个强大的表达式语言,支持在运行时查询和操作对象图。poi-tl的表达式模板支持切换到SpEL模式。
builder.setElMode(ELMode.SPEL_MODE);
关于SpEL的写法可以参见官网,下面给出一些典型的示例。
{{name}}
{{name.toUpperCase()}} (1)
{{empty?:'这个字段为空'}}
{{sex ? '男' : '女'}} (2)
{{new java.text.SimpleDateFormat('yyyy-MM-dd HH:mm:ss').format(time)}} (3)
{{new java.text.SimpleDateFormat('yyyy-MM-dd hh:mm').format(time)}}
{{price/10000 + '万元'}} (4)
{{dogs[0].name}} (5)
{{dogs[0].age}}
1 | 方法调用 |
2 | 三目运算符 |
3 | 方法调用 |
4 | 运算符 |
5 | 数组列表 |
poi-tl提供了表达式计算接口 RenderDataCompute ,它是一个很重要的扩展点,支持扩展任何的表达式引擎。SpEL模式是通过 SpELRenderDataCompute 实现。 |
6.2. 自定义语法
高度扩展性表现在其本身的语法也可以自定义,如果你不喜欢 {{}}
的方式,更偏爱freemarker ${}
的方式:
builder.buildGramer("${", "}");
6.3. 模板生成模板
模板引擎不仅仅可以生成文档,也可以生成新的模板,比如我们想构造这样的新模板:把原先的一个模板标签分成两个模板标签:
put("title", "{{title}}\n{{subtitle}}");