web-dev-qa-db-ja.com

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

他に方法はありますか?

23
Sergio del Amo

Velocity 1.6を使用できます。_$array_という名前の配列の場合、$array.get($index)を実行するだけで済みます。

次のVelocity 1.7では、_$array[$index]_(および_$list[$index]_および_$map[$key]_と同様)を実行できるようになります。

25
Nathan Bubna

Arrays.asList(T... a) を使用して、配列を List でラップできます。新しいListオブジェクトは元の配列によってサポートされているので、コピーを無駄に割り当てません。新しいリストに加えられた変更であっても、配列に反映されます。

次に、$list.get(int index)を使用して、Velocityでオブジェクトを取得できます。

配列から1つまたは2つのオブジェクトを取得する必要がある場合は、 Array.get(Object array, int index) を使用して配列から項目を取得することもできます。

9
Brian
_String[] arr = new String[] {"123", "doc", "projectReport.doc"}; 
_

私の意見では、アクセスする自然な方法は次のようになります。

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

速度で_$att_id = $arr[0]_のような配列から直接値を取得する方法がないため、$array.get("arr", 1)を使用してこの値を取得できます。
うまくいくことを願っています:)

2
Rajesh Chowdary

速度1.6

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

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

1
bsod

値1で始まる暗黙的なカウンター$ velocityCountがあるため、独自のカウンターを作成する必要はありません。

1
kez

ブライアンの答え は確かに正しいですが、次のVelocity 1.6では配列が直接サポートされることを知りたいかもしれません。詳細は Velocityのドキュメント を参照してください。

同じ質問があり、別のスレッドで回答されました

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

Confluence/Velocityテンプレートでの配列のインデックス付け

最終的に、velocity-tools.jarの ListTool を使用しました。配列の要素にアクセスし、そのサイズを取得するメソッドがあります。

0
Luke Quinane