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') 
Share:
12,874
hansvb
Author by

hansvb

Updated on June 06, 2022

Comments

  • hansvb
    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
      bryantsai almost 15 years
      Depending 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
    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.