Apache Velocity:如何像 Java 那样定义自定义方法?
Apache Velocity: How to define a custom method like in Java?
我目前在 Polarion 应用程序 ALM 软件中编写了一个 wiki 页面,这些页面上的语法包括(据我所知)HTML、Javascript 和 Apache Velocity。
所以我想在 Apache Velocity 中编写一个脚本,因为我认为这是访问 Polarion 工作项的最佳方式,因为有预定义的方法。
现在我想编写一个方法来遍历一堆工作项并将它们的 ID 收集到列表或数组中。
所以我只想像 Java (http://www.tutorialspoint.com/java/java_methods.htm) 那样定义一个新方法,但是我在网上找不到任何地方在 Velocity 中是如何完成的(我还搜索了 "functions Apache Velocity" 也没有结果)。
这是否可能,或者如果我想编写自己的 methods/functions,我是否必须使用 Java 脚本?
这是可以做到的,用你想在速度模板中使用的方法创建一个静态的class。在速度上下文对象中设置此 class。
velocityContext.put("anyKey",YourStaticClass.class)
此 class 将在速度模板中可用。然后您可以访问它的方法,如:anyKey.Method()
也许您正在寻找宏?
http://people.apache.org/~henning/velocity/html/ch07.html
上面的片段link:
这是一个带有两个参数的 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>
我目前在 Polarion 应用程序 ALM 软件中编写了一个 wiki 页面,这些页面上的语法包括(据我所知)HTML、Javascript 和 Apache Velocity。
所以我想在 Apache Velocity 中编写一个脚本,因为我认为这是访问 Polarion 工作项的最佳方式,因为有预定义的方法。
现在我想编写一个方法来遍历一堆工作项并将它们的 ID 收集到列表或数组中。
所以我只想像 Java (http://www.tutorialspoint.com/java/java_methods.htm) 那样定义一个新方法,但是我在网上找不到任何地方在 Velocity 中是如何完成的(我还搜索了 "functions Apache Velocity" 也没有结果)。
这是否可能,或者如果我想编写自己的 methods/functions,我是否必须使用 Java 脚本?
这是可以做到的,用你想在速度模板中使用的方法创建一个静态的class。在速度上下文对象中设置此 class。
velocityContext.put("anyKey",YourStaticClass.class)
此 class 将在速度模板中可用。然后您可以访问它的方法,如:anyKey.Method()
也许您正在寻找宏? http://people.apache.org/~henning/velocity/html/ch07.html
上面的片段link:
这是一个带有两个参数的 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>