2009-03-18 29 views
14

Có thể đặt tham chiếu Velocity thành 'null' hoặc 'undefined' không?Hủy đặt biến trong Velocity

Các Velocity template language reference nói

#set - Thiết lập giá trị của một định dạng tài liệu tham khảo :

# [ { ] set [ } ] ($ref = [ ", ' ]arg[ ", ' ])

Cách sử dụng:

$ref - Các LHS của nhiệm vụ phải là một biến tham chiếu hoặc tham chiếu thuộc tính.

arg - RHS của nhiệm vụ, arg được phân tích cú pháp nếu được kèm theo trong dấu ngoặc kép và không được phân tích cú pháp nếu được đính kèm trong dấu nháy đơn. Nếu RHS đánh giá là không, nó không được gán cho LHS. (nhấn mạnh mỏ)

Tôi không thể tìm thấy macro tương đương #unset.

Trả lời

12

Đọc ...

Tùy thuộc vào Velocity được cấu hình như thế nào, nó thường là không thể để loại bỏ một tài liệu tham khảo hiện tại từ bối cảnh thông qua cơ chế này. (Lưu ý rằng điều này có thể được phép bằng cách thay đổi một trong những cấu hình Velocity tính)

Trong VE cấu hình mặc định có tài sản

directive.set.null.allowed = false 

nếu đúng, có một bên tay phải của tuyên bố #set() với tham chiếu không hợp lệ hoặc giá trị null sẽ đặt bên trái thành không. Nếu sai, phía tay trái sẽ giữ nguyên

Thay đổi nó để true sử dụng setProperty() trên org.apache.velocity.app.Velocity và bạn đã sẵn sàng để đi.

23

Bạn có thể đặt tham chiếu thành sai. Khi tham chiếu không null được coi là đúng, bạn có thể kiểm tra xem tham chiếu đã được đặt chưa. Điều này rất hữu ích trong các vòng lặp.

 
#foreach ($obj in $list) 
#set ($x = false) 
#set ($x = $obj.maybeNull()) 
#if ($x) 
... 
$x 
#end 
#end 
+0

Kể từ biến vận tốc sẽ giữ giá trị cũ, nếu bạn cố gắng gán một "null-giá trị ", Tôi thấy giải pháp này khá hay. Vào cuối vòng lặp, tôi chỉ đặt biến thành false và khi bạn không thể gán giá trị, giá trị của nó sẽ là false. – Goot

+0

giải pháp thay thế tuyệt vời. Cảm ơn :) – Dimitris

1

Nếu bạn đang cố gắng để có được các biến có phạm vi, bạn có thể lạm dụng phạm vi thành lập bởi #foreach:

#foreach($localVar in [ 'theValue']) 

#end 

## localVar will be unset (or returned to previous value) again 
Các vấn đề liên quan