Hi,
I am facing a problem when trying to use Java 5 enums as parameters to
getters in a velocity template. Obviously, Velocity does not seem to
manage it correcty. I'd like to be able to write something like :
$person.get(Title) where Java code would be person.get(PersonEnum.Title)
To acheive that, the only way I've found is to expose an enum wrapper
which allows me to retrieve enum values. The problem is that I would
have to do that for each enum in my application which is not optimal.
Here's a sample code which explains my solution. I'm not sure there's
any better way, since I can't find any documentation about that :
public class VelocityEnumProblem {
public static void main(String[] args) {
try {
Velocity.init();
VelocityContext ctx = new VelocityContext();
EnumMap<MyEnum,String> container = new EnumMap<MyEnum,
String>(MyEnum.class);
container.put(MyEnum.ONE, "something to store");
ctx.put("container", container);
ctx.put("MyEnum", new MyEnumWrapper());
PrintWriter pout = new PrintWriter(System.out);
Velocity.evaluate(ctx, pout, "test",
"$container.get($MyEnum.ONE) ");
pout.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static class MyEnumWrapper {
public MyEnum get(String name) {
return MyEnum.valueOf(name);
}
}
public enum MyEnum {
ONE,
TWO,
THREE
}
}