转载

在 Velocity 模板中访问常量

最近项目中一个问题:在常量类 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瓜哥,http://www.diguage.com/

原文链接: http://www.diguage.com/archives/141.html

版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

如果感觉这篇文章不错,请点击这里的 分享按钮 ,分享到微博等地方去,让更多人受益!

您的支持是D瓜哥最大的写作动力!谢谢!

原文  http://www.diguage.com/archives/141.html
正文到此结束
Loading...