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

还有其他方法吗?

4

8 回答 8

27

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

在即将到来的 Velocity 1.7 中,人们将能够做到$array[$index](以及$list[$index]$map[$key])。

于 2009-02-02T22:58:32.357 回答
10

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

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

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

于 2008-10-10T15:56:52.513 回答
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]速度这样从数组中获取值的直接方法。
希望它有效:)

于 2009-12-22T06:22:06.100 回答
2

速度 1.6

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

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

于 2019-01-26T00:15:13.993 回答
1

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

于 2009-08-21T00:33:12.333 回答
1

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

于 2008-10-13T19:34:38.300 回答
0

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

于 2009-05-13T06:01:06.407 回答
0

我有同样的问题,它在另一个线程上得到了回答

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

Confluence / Velocity 模板中的数组索引

于 2014-12-10T13:19:02.953 回答