2009-07-10 29 views
9

tất cả. Tôi cần phải sử dụng java 5 enum trong mẫu vận tốc, để tôi có thể viết một cái gì đó nhưSử dụng Java 5 enums dưới dạng biến Velocity

 
public enum Level{ 
    INFO, ERROR; 
} 

Velocity template: 

#if($var == Level.INFO) 
... 
#else 
... 
#end 

Làm thế nào nó có thể được thực hiện? Cảm ơn trước.

+0

Tùy thuộc vào những gì nếu bạn thực sự làm. Ngoài ra, cho dù đây chỉ là 1 loại hoặc nhiều hoạt động khác nhau. http://stackoverflow.com/questions/859563/java-enums-and-switch-statements-the-default-case có thể hữu ích. – bryantsai

Trả lời

3

Không đẹp, nhưng một cách giải quyết sẽ là (thủ công) đặt các hằng số enum mà bạn cần vào ngữ cảnh Velocity.

request.setAttribute('level_info', Level.INFO); 
request.setAttribute('level_error', Level.ERROR); 

Sau đó, bạn có thể nói

#if ($var == $level_info) 

lẽ dễ dàng hơn: Chỉ cần sử dụng toString() sơ thẩm enum của bạn

#if ("$var" == 'INFO') 
+0

Chỉ cần tự hỏi, điều này thực sự khác nhau? – bryantsai

+0

@bryantsai: Phiên bản thứ hai cũng sẽ đúng nếu $ var giữ một số đối tượng khác in dưới dạng INFO, chẳng hạn như một Chuỗi. Không chắc rằng điều này sẽ là một vấn đề, mặc dù. – Thilo

+0

+1 cho phiên bản thứ hai –

16

Trên thực tế, thay vì phương pháp nó sẽ là tốt hơn để sử dụng toString() name(), vì nó trả về chính xác giá trị của enum và là cuối cùng do đó không thể được overriden trong tương lai. Vì vậy, trong vận tốc bạn có thể sử dụng một cái gì đó như

 
#if($var.name() == "INFO") 
6

Vì tốc độ 1.5, nếu hai mục được so sánh với == là các lớp khác nhau, nó sẽ tự động thực hiện một toString() trên cả hai. Vì vậy, hãy thử

#if($var == "INFO") 
Các vấn đề liên quan