Использование перечислений Java 5 в качестве переменных Velocity - PullRequest
10 голосов
/ 10 июля 2009

все. Мне нужно использовать java 5 enum в шаблоне скорости, чтобы я мог написать что-то вроде

public enum Level{
    INFO, ERROR;
}

Velocity template:

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

Как это можно сделать? Заранее спасибо.

Ответы [ 3 ]

19 голосов
/ 10 июля 2009

На самом деле, вместо метода toString () было бы лучше использовать name (), поскольку оно возвращает именно значение enum и является окончательным, поэтому в будущем не может быть переопределено. Так что по скорости вы можете использовать что-то вроде

#if($var.name() == "INFO")
7 голосов
/ 19 июля 2009

Начиная с Velocity 1.5, если два элемента, сравниваемые с ==, относятся к разным классам, он автоматически выполняет toString () для обоих. Так что попробуйте

#if($var == "INFO")
3 голосов
/ 10 июля 2009

Не красиво, но одним из обходных путей было бы (вручную) поместить необходимые константы перечисления в контекст Velocity.

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

Тогда вы могли бы сказать

#if ($var == $level_info)

Может быть, проще: просто используйте toString() вашего экземпляра enum

#if ("$var" == 'INFO') 
...