从Apache Velocity模板访问常量值?

时间:2020-03-06 14:52:23  来源:igfitidea点击:

是否可以从Velocity模板访问常量值(即Java类中定义的公共静态最终变量)?

我希望能够写这样的东西:

#if ($a lt Long.MAX_VALUE)

但这显然不是正确的语法。

解决方案

Velocity只能使用其在上下文中找到的任何内容,例如

context.put("MaxLong", Long.MAX_VALUE);

由于查询的工作方式,我们不能使用静态或者在Velocity的上下文中访问事物的静态成员(请参见Velocity的属性查询规则)。最好的办法是在上下文中显式添加要检查的值。

乍看之下编辑10月6日,似乎可以访问静态成员。有关更多信息,请参见Velocity开发人员指南"静态类"的支持。我还没有尝试过。

有很多方法。

1)我们可以将值直接放在上下文中。

2)我们可以使用FieldMethodizer使类中的所有公共静态字段都可用。

3)我们可以使用自定义的Uberspect实现,该实现在查找顺序中包括公共静态字段。

4)我们可以使用VelocityTools中的FieldTool。

对于一些值,我建议1;对于一些类,建议2;对于许多类和值,建议3;如果我们已经在使用VelocityTools,否则将使用1或者2.