首页 > Java, Web开发, 挨踢(IT), 日拱一卒 > 在 Velocity 模板中访问常量

在 Velocity 模板中访问常量

2016年2月25日 发表评论 阅读评论 1,057 人阅读    

最近项目中一个问题:在常量类 GlobalConstants 中定义了许多关于订单状态的常量(使用public static final 修饰),这些常量,某些情况也许有在 Velocity 模板中访问。请问,该如何访问?

由上面的问题,引申出另外一个问题:又该如何访问静态方法呢?

今天先来解决其中的一个问题。

访问常量

Velocity Tool 中提供了相应的工具类,可以非常方便地实现我们的需求。可能大家都还记得,D瓜哥在“Velocity 工具类配置” 中提到了 toolbox.xml。这里还需要在这个文件中做适当的配置。

我们这里假设我们的常量都定义在 com.diguage.util.GlobalConstants。那么,我们只需要在 toolbox.xml中添加如下内容:

<tool>
    <key>fieldTool</key>
    <scope>application</scope>
    <class>org.apache.velocity.tools.generic.FieldTool</class>
    <parameter name="include"
               value="com.diguage.util.GlobalConstants,
                      com.diguage.util.WebConstants"/>
</tool>

这样,定义在 com.diguage.util.GlobalConstants 中的常量都可以在页面中访问了,访问方式如下:$fieldTool.ORDER_STATUS_WAITTING_PAY

如果常量定义在多个类中,这都添加到这里,使用逗号分割;如果两个类中,存着同名的常量,则后面类中的常量会覆盖前面类的定义。

有时,我们也会在某些类中定义少量的常量。这是可以这样访问:$fieldTool.in("com.diguage.SomeClass").ANOTHER_CONSTANT

这时,你可能会问,如果有一个类的对象,该如何访问这个类的常量? Velocity 也通过 FieldTool 类提供了非常方便的方式。例如,我们需要访问 Integer.MAX_VALUE,则可以这样访问:$fieldTool.in(0).MIN_VALUE

另外,还有一点需要说明,如果我们访问了在某个类或者对象中一个常量,那么这个类或对象中的其他常量也会被自动“缓存”起来,可以直接访问: $fieldTool.MAX_VALUE。这个特性,可以通过将上面的配置中,添加 <parameter name="storeDynamicLookups" value="false"/> 来关闭。

另外一个问题:如何访问静态方法呢?暂时还有问题没有解决,这个等解决后再发文说明。

参考资料

  1. Velocity JavaDoc FieldTool


作 者: D瓜哥,https://www.diguage.com/
原文链接:https://wordpress.diguage.com/archives/141.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.