2008-10-10 18 views
19

que tienen una matriz de Java tales como:¿Cuál es la mejor forma de acceder a una matriz dentro de Velocity?

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

En mi opinión la forma natural de acceso sería:

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

Pero eso no está funcionando. He venido con esta solución. Pero es demasiado código para una tarea tan fácil.

#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 

¿Hay alguna otra manera?

Respuesta

8

Puede envolver la matriz en List usando Arrays.asList(T... a). El nuevo objeto List está respaldado por la matriz original, por lo que no asigna una cantidad innecesaria de copias. Incluso los cambios realizados en la nueva lista se propagarán nuevamente a la matriz.

Luego puede usar $list.get(int index) para sacar sus objetos en Velocity.

Si necesita obtener solo uno o dos objetos de una matriz, también puede usar Array.get(Object array, int index) para obtener un elemento de una matriz.

1

Brian's answer es de hecho correcto, aunque es posible que desee saber que la próxima Velocity 1.6 tiene soporte directo para matrices; vea el Velocity documentation para más información.

+1

Es verdad. En 1.6-beta1 y posterior, puede llamar a la mayoría de los métodos ArrayList en sus objetos de matriz. p.ej. $ array.get (0) $ array.set (0, 'foo') –

21

Puede usar el uso de Velocity 1.6: para una matriz llamada $array, simplemente puede hacer $array.get($index).

En la próxima Velocidad 1.7, uno será capaz de hacer $array[$index] (así como $list[$index] y $map[$key]).

0

Terminé usando el ListTool de velocity-tools.jar. Tiene métodos para acceder a los elementos de una matriz y también obtener su tamaño.

0

hay un contador implícito $ velocityCount que comienza con el valor 1 por lo que no tiene que crear su propio contador.

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

En mi opinión la forma natural de acceso sería:

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

El valor de esto se puede conseguir mediante el uso de $array.get("arr", 1) porque no hay forma directa de obtener el valor de la matriz como $att_id = $arr[0] en velocidad.
esperar que funcione :)

0

I tiene la misma pregunta y se quedó contestada en otro hilo

#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

+0

¿Alguien puede responder este http://stackoverflow.com/questions/31116553/how-to-append-hash-tables-in-velocity- modelo –

Cuestiones relacionadas