【问题标题】:Apache Velocity: How to define a custom method like in Java?Apache Velocity:如何在 Java 中定义自定义方法?
【发布时间】:2015-12-14 06:13:03
【问题描述】:

我目前在 Polarion Application ALM 软件中编写一个 wiki 页面,这些页面上的语法包括(据我所知)HTML、Javascript 和 Apache Velocity。

所以我想在 Apache Velocity 中编写一个脚本,因为我认为这是访问 Polarion 工作项的最佳方式,因为有预定义的方法。

现在我想编写一个方法,它遍历一堆工作项并将它们的 id 收集到一个列表或数组中。

所以我只想定义一个新方法,比如在 Java (http://www.tutorialspoint.com/java/java_methods.htm) 中,但我在网络上的任何地方都找不到 Velocity 是如何完成的(我还搜索了“函数 Apache Velocity”,也没有结果)。

如果我想编写自己的方法/函数,这甚至可能吗?或者我必须使用 Javascript 吗?

【问题讨论】:

    标签: function methods velocity


    【解决方案1】:

    这可以做到,用你想在velocity模板中使用的方法创建一个静态类。在速度上下文对象中设置此类。

    velocityContext.put("anyKey",YourStaticClass.class)
    

    这个类将在速度模板中可用。然后您可以访问其方法,例如:anyKey.Method()

    【讨论】:

      【解决方案2】:

      也许您正在寻找宏? http://people.apache.org/~henning/velocity/html/ch07.html

      来自上述链接的片段:

      这是一个 Velocimacro,它有两个参数,一个颜色和一个对象列表:

      #macro( tablerows $color $values )
        #foreach( $value in $values )
          <tr><td bgcolor=$color>$value</td></tr>
        #end
      #end
      
      #set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )
      #set( $color = "blue" )
      
      <table>
        #tablerows( $color $greatlakes )
      </table>
      

      tablerows 宏正好有两个参数。第一个参数代替$color,第二个参数代替$values。任何可以放入 VTL 模板的东西都可以放入 Velocimacro 的主体中。

      请注意,$greatlakes 代替了 $values。渲染此模板时,会生成以下输出:

      <table>
      <tr><td bgcolor="blue">Superior</td></tr>
      <tr><td bgcolor="blue">Michigan</td></tr>
      <tr><td bgcolor="blue">Huron</td></tr>
      <tr><td bgcolor="blue">Erie</td></tr>
      <tr><td bgcolor="blue">Ontario</td></tr>
      </table>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        相关资源
        最近更新 更多