2012-12-14 37 views
5

Vận tốc chỉ in tên thẻ nếu không tìm thấy giá trị trong VelocityContext, tức là $ name trong tệp mẫu của tôi, nhưng không có giá trị cho "name" trong VelocityContext, vì vậy chỉ cần "$ name" được in. Tôi muốn Velocity in giá trị mặc định nếu không có giá trị cho biến, tôi chỉ cố gắng mở rộng AbstractCotnext và ghi đè phương thức internalGet(), nhưng giá trị trả về của internalGet() sẽ được truyền sang đối tượng Node, tôi không biết làm thế nào để tạo một đối tượng Node mới trong phương thức internalGet() của tôi, và tôi cũng nghĩ cách này rất phức tạp.Velocity có thể đặt giá trị mặc định cho một biến khi không tìm thấy giá trị trong VelocityContext không?

có cách đơn giản nào để đặt giá trị mặc định (giá trị mặc định chỉ là một chuỗi) không?

cảm ơn.

Trả lời

16

Không dễ dàng cho tất cả các biến như xa như tôi thấy, tôi chỉ cố gắng làm điều đó cho một số biến cụ thể như sau:

mẫu:

#if (!$somevar) 
#set ($somevar = "mycontent") 
#end 

Var is: $somevar 

Kết quả:

Var is: mycontent 
-1

Có một vài điều bạn có thể làm ngắn của nội dung hack Velocity. Có một cái nhìn tại this question.

2

Google xung quanh để tham khảo VelocityInsertionEventHandler để biết cách làm rộng rãi.

xem xét phương pháp alt() của DisplayTool đối với trường hợp cá nhân (một phần của dự án VelocityTools)

+0

nhờ mỗi cơ thể mỗi nhiều, và cho phép tôi để hỏi một câu hỏi khác: có cách nào để thay đổi tên biến trước khi làm cho đầu ra? ví dụ: tên biến là userName trong tệp mẫu, nhưng trong VelocityContext, khóa là USERNAME, tôi muốn thay đổi tên biến thành từ viết hoa trước khi kết xuất. – hiway

6

Tạo một velocimacro trong mẫu của bạn:

#macro(defaultValue $parm) 
#if (!$!parm || $!parm == "") 
i-like-will 
#else 
$parm 
#end 
#end 

Và gọi nó là như thế này trong cùng một mẫu:

#defaultValue($name) 

Kiểm tra Apache Velocity - Velocity User Guide để biết thêm thông tin về velocimacros (và vận tốc nói chung).

+1

tại sao bạn có \ biểu tượng ở phía trước số # của mình? Tôi nghĩ rằng các macro và nếu các câu lệnh được định nghĩa là #macro và #if không \ #if –

+0

Bạn là chính xác, tôi không chắc chắn về việc định dạng đã bị rối tung lên như thế nào.Tôi đã sửa nó. –

+0

Cảm ơn, tôi nghĩ rằng nó có một số ý nghĩa đặc biệt mà tôi đã bỏ lỡ :-) –

0

Một chút muộn cho bữa tiệc, nhưng bạn cũng có thể thực hiện kiểm tra khi xác định biến. Tôi đã phải nén này để một dòng để loại bỏ không gian dư thừa trong sản lượng, nhưng đây là một ví dụ từ một trong những dự án của tôi:

#set ($qlDefault = "qlinks") 
#set ($qlClass = "#if($sharedCtaImage.getChild('path').value != '/')$qlDefault#else$qlDefault full#end") 

Mặc định lớp được định nghĩa, sau đó tôi kiểm tra xem khác, giá trị cụ thể được điền vào để xác định xem tôi có giữ lớp mặc định hay thêm một lớp bổ sung không. Điều này cũng có thể làm việc để trao đổi các lớp học là tốt.

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