在Velocity中访问数组的最佳方法是什么?

时间:2008-10-10 15:22:55

标签: velocity

我有一个Java数组,例如:

String[] arr = new String[] {"123","doc","projectReport.doc"};

在我看来,访问的自然方式是:

 #set($att_id = $arr[0])
 #set($att_type = $arr[1])
 #set($att_name = $arr[2])

但它没有用。我已经采用了这种解决方法。但是对于这么简单的任务来说,它的代码太多了。

#set($counter = 0)
#foreach($el in $arr)
    #if($counter==0)
        #set($att_id = $el)
    #elseif($counter==1)
        #set($att_type = $el)
    #elseif($counter==2)
         #set($att_name = $el)
    #end
    #set($counter = $counter + 1)
#end

还有其他办法吗?

8 个答案:

答案 0 :(得分:25)

您可以使用Velocity 1.6:对于名为$array的数组,可以只执行$array.get($index)

在即将推出的Velocity 1.7中,我们可以$array[$index](以及$list[$index]$map[$key])。

答案 1 :(得分:8)

您可以使用List将数组包装在Arrays.asList(T... a)中。新的List对象由原始数组支持,因此不会浪费地分配副本。即使对新列表所做的更改也会传播回数组。

然后您可以使用$list.get(int index)在Velocity中获取对象。

如果您只需要从数组中获取一个或两个对象,您还可以使用Array.get(Object array, int index) 从数组中获取项目。

答案 2 :(得分:2)

String[] arr = new String[] {"123", "doc", "projectReport.doc"}; 

在我看来,访问的自然方式是:

 #set($att_id = $arr[0]) 
 #set($att_type = $arr[1]) 
 #set($att_name = $arr[2]) 

使用$array.get("arr", 1)可以获得此值,因为没有直接的方法可以从$att_id = $arr[0]这样的数组中获取值。
希望它有效:)

答案 3 :(得分:1)

Brian's answer确实是正确的,尽管您可能想知道即将推出的Velocity 1.6直接支持数组;有关详细信息,请参阅Velocity documentation

答案 4 :(得分:1)

有一个隐含的计数器$ velocityCount,它以值1开头,因此您不必创建自己的计数器。

答案 5 :(得分:0)

我最终使用了velocity-tools.jar中的ListTool。它有方法来访问数组的元素并获得它的大小。

答案 6 :(得分:0)

我有同样的问题,并在另一个帖子上得到了解答

#set ( $Page = $additionalParams.get('Page') )
#set ( $Pages = [] )
#if ( $Page != $null && $Page != "" )
    #foreach($i in $Page.split(";"))
        $Pages.add($i)
    #end
#end

Array indexing in Confluence / Velocity templates

答案 7 :(得分:0)

速度1.6

$myarray.isEmpty()
$myarray.size()
$myarray.get(2)
$myarray.set(1, 'test')

http://velocity.apache.org/engine/1.7/user-guide.html