Using Java 5 enums as Velocity variables
12,874
Solution 1
Actually, instead of toString() method it would be better to use name(), as it returns exactly the value of enum and is final hence can't be overriden in future. So in velocity you can use something like
#if($var.name() == "INFO")
Solution 2
As of Velocity 1.5, if the two items being compared with == are of different classes, it automatically does a toString() on both. So try
#if($var == "INFO")
Solution 3
Not pretty, but one workaround would be to (manually) place the enum constants that you need into the Velocity context.
request.setAttribute('level_info', Level.INFO);
request.setAttribute('level_error', Level.ERROR);
Then you could say
#if ($var == $level_info)
Maybe easier: Just use the toString()
of your enum instance
#if ("$var" == 'INFO')
Author by
hansvb
Updated on June 06, 2022Comments
-
hansvb about 2 years
all. I need to use java 5 enum in velocity template, so that I could write something like
public enum Level{ INFO, ERROR; } Velocity template: #if($var == Level.INFO) ... #else ... #end
How can it be done? Thanks in advance.
-
bryantsai almost 15 yearsDepending on what your if .. else .. actually do. Also, whether this is only 1 kind or many different operations. stackoverflow.com/questions/859563/… might be helpful.
-
-
hansvb almost 15 years@bryantsai: The second version will also be true if $var holds some other object that prints as INFO, such as a String. Unlikely that this is going to be a problem, though.