是否可以从Velocity模板访问常量值(即Java类中定义的公共静态最终变量)?
我希望能够写出这样的内容:
#if ($a lt Long.MAX_VALUE)
但这显然不是正确的语法。
答案 0 :(得分:11)
有很多方法。
1)您可以将值直接放在上下文中。
2)您可以使用FieldMethodizer使类中的所有公共静态字段可用。
3)您可以使用自定义Uberspect实现,其中包含查找顺序中的公共静态字段。
4)您可以使用VelocityTools的FieldTool。
我推荐1代表几个值,2代表几个类,3代表很多类和值,如果你已经使用了VelocityTools,则推荐4,否则将使用1或2。
答案 1 :(得分:6)
Velocity只能使用它在上下文中找到的任何东西,例如
context.put("MaxLong", Long.MAX_VALUE);
由于查找工作的方式,你无法使用静态或访问Velocity上下文中的静态成员(参见Velocity的Property lookup rules)。最好的办法是在您的上下文中明确添加要检查的值。
编辑10月6日第二眼看来,似乎可以访问静态成员。有关详细信息,请参阅velocity Developer guide - Support for "Static Classes"。不过,我没有试过这个。