6. 扩展功能

6.1. EL表达式:SpingEL

Spring Expression Language (SpEL)是一个强大的表达式语言,支持在运行时查询和操作对象图。poi-tl的表达式模板支持切换到SpEL模式。

  1. builder.setElMode(ELMode.SPEL_MODE);

关于SpEL的写法可以参见官网,下面给出一些典型的示例。

  1. {{name}}
  2. {{name.toUpperCase()}} (1)
  3. {{empty?:'这个字段为空'}}
  4. {{sex ? '男' : '女'}} (2)
  5. {{new java.text.SimpleDateFormat('yyyy-MM-dd HH:mm:ss').format(time)}} (3)
  6. {{new java.text.SimpleDateFormat('yyyy-MM-dd hh:mm').format(time)}}
  7. {{price/10000 + '万元'}} (4)
  8. {{dogs[0].name}} (5)
  9. {{dogs[0].age}}
1方法调用
2三目运算符
3方法调用
4运算符
5数组列表
poi-tl提供了表达式计算接口 RenderDataCompute,它是一个很重要的扩展点,支持扩展任何的表达式引擎。SpEL模式是通过 SpELRenderDataCompute 实现。

6.2. 自定义语法

高度扩展性表现在其本身的语法也可以自定义,如果你不喜欢 {{}} 的方式,更偏爱freemarker ${} 的方式:

  1. builder.buildGramer("${", "}");

6.3. 模板生成模板

模板引擎不仅仅可以生成文档,也可以生成新的模板,比如我们想构造这样的新模板:把原先的一个模板标签分成两个模板标签:

  1. put("title", "{{title}}\n{{subtitle}}");