views:

889

answers:

3

hi, 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.

+1  A: 

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')
Thilo
Just wondering, is this really different?
bryantsai
@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.
Thilo
+1 for the second version
Maurice Perry
+3  A: 

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")
Maksym Govorischev
+3  A: 

Hi,

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")
Will Glass