【问题标题】:Accessing constant values from an Apache Velocity template?从 Apache Velocity 模板访问常量值?
【发布时间】:2010-09-13 23:57:53
【问题描述】:

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

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

#if ($a lt Long.MAX_VALUE)

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

【问题讨论】:

    标签: java velocity


    【解决方案1】:

    有很多方法。

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

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

    3) 您可以使用在查找顺序中包含公共静态字段的自定义 Uberspect 实现。

    4) 您可以使用 VelocityTools 中的FieldTool

    我推荐 1 用于几个值,2 用于几个类,3 用于很多类和值,如果您已经在使用 VelocityTools 并且将使用 1 或 2,则为 4。

    【讨论】:

      【解决方案2】:

      Velocity 只能使用它在其上下文中找到的任何东西,例如

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

      由于 Velocity 的查找工作方式,您不能在 Velocity 的上下文中使用静态或访问事物的静态成员(请参阅 Velocity 的 Property lookup rules)。最好的办法是在上下文中明确添加要检查的值。


      编辑 10 月 6 日再次看到,似乎可以访问静态成员。有关更多信息,请参阅速度 Developer guide - Support for "Static Classes"。不过,我还没有尝试过。

      【讨论】:

      • 对静态类的支持,不扩展到静态字段,只是静态方法。此外,它仅在最新版本 1.6-beta1 中。
      猜你喜欢
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2023-03-04
      相关资源
      最近更新 更多