2008-10-10 39 views
19

Tôi có một mảng Java như:Cách tốt nhất để truy cập một mảng bên trong Vận tốc là gì?

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

Theo tôi cách tự nhiên để truy cập sẽ là:

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

Nhưng nó không làm việc. Tôi đã đến với cách giải quyết này. Nhưng nó hơi quá nhiều mã cho một nhiệm vụ dễ dàng như vậy.

#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 

Còn cách nào khác không?

Trả lời

8

Bạn có thể quấn mảng trong một List bằng cách sử dụng Arrays.asList(T... a). Đối tượng List mới được hỗ trợ bởi mảng ban đầu để nó không phân bổ một bản sao. Ngay cả những thay đổi được thực hiện cho Danh sách mới sẽ truyền lại cho mảng.

Sau đó, bạn có thể sử dụng $list.get(int index) để đưa đối tượng của mình ra ngoài trong Vận tốc.

Nếu bạn chỉ cần lấy một hoặc hai đối tượng từ một mảng, bạn cũng có thể sử dụng Array.get(Object array, int index) để lấy một mục từ một mảng.

1

Brian's answer thực sự là chính xác, mặc dù bạn có thể muốn biết rằng Velocity 1.6 sắp tới có hỗ trợ trực tiếp cho mảng; xem Velocity documentation để biết thêm thông tin.

+1

Đó là sự thật. Trong phiên bản 1.6-beta1 và mới hơn, bạn chỉ có thể gọi hầu hết các phương thức ArrayList trên các đối tượng mảng của bạn. ví dụ. $ array.get (0) $ array.set (0, 'foo') –

21

Bạn có thể sử dụng Tốc độ 1,6: cho một mảng có tên $array có thể chỉ đơn giản là làm $array.get($index).

Trong Velocity 1.7 sắp tới, người ta có thể làm $array[$index] (cũng như $list[$index]$map[$key]).

0

Tôi đã sử dụng số ListTool từ velocity-tools.jar. Nó có các phương thức để truy cập vào các phần tử của mảng và cũng có được kích thước của nó.

0

có một truy cập ngầm $ velocityCount bắt đầu bằng giá trị 1 để bạn không phải tạo bộ đếm của riêng mình.

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

Theo tôi cách tự nhiên để truy cập sẽ là:

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

Giá trị cho điều này có thể có được bằng cách sử dụng $array.get("arr", 1) vì không có cách trực tiếp để nhận được giá trị từ mảng như $att_id = $arr[0] trong vận tốc.
Hy vọng nó hoạt động :)

0

Tôi có cùng một câu hỏi và nó đã trả lời trên một thread

#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

Có ai trả lời câu hỏi này http://stackoverflow.com/questions/31116553/how-to-append-hash-tables-in-velocity- bản mẫu –

Các vấn đề liên quan