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

25

我有一个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个回答

27

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

在即将推出的Velocity 1.7中,您将能够执行$array[$index](以及$list[$index]$map[$key])。


10
您可以使用Arrays.asList(T... a)将数组包装到一个List中。新的List对象由原始数组支持,因此不会浪费地分配一个副本。即使对新List所做的更改也会传播回数组。
然后,您可以在Velocity中使用$list.get(int index)来获取您的对象。
如果您只需要从数组中获取一个或两个对象,您也可以使用Array.get(Object array, int index)来获取数组中的项目。

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)来获取,因为在velocity中没有像$att_id = $arr[0]这样直接从数组中获取值的方式。
希望它能够正常工作 :)


2

1

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


1

Brian的答案是正确的,不过您可能想知道即将推出的Velocity 1.6直接支持数组;有关更多信息,请参阅Velocity文档


1
没错,在1.6-beta1及更高版本中,您可以直接在数组对象上调用大多数ArrayList方法。例如:$array.get(0) $array.set(0, 'foo') - Nathan Bubna

0

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


0

我有同样的问题,它在另一个帖子中得到了回答。

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

在Confluence / Velocity模板中进行数组索引


有人能回答这个问题吗? http://stackoverflow.com/questions/31116553/how-to-append-hash-tables-in-velocity-template - Manoj Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接