Hi,
I was wondering, is there some easy way (annotation, config) to perform type
conversion on Enum types?
I noticed that struts does not handle Enum types by default, which is not
what I expected.
Lets say we have an Enum like that:
public enum Fruit { ORANGE, APPLE; }
and Action with field and setter:
private Fruit fruit;
public void setFruit(Fruit fruit) { this.fruit = fruit; }
I want to submit String ORANGE from html form and get Fruit.ORANGE object in
my Action after population.
I wrote my own type converter, here's the code:
public class EnumConverter extends StrutsTypeConverter {
public Object convertFromString(Map context, String[] values, Class
toClass) {
try {
return toClass.getMethod("valueOf",
String.class).invoke(toClass, values[0]);
} catch (Exception e) {
throw new TypeConversionException(e);
}
}
public String convertToString(Map context, Object o) {
return ((Enum) o).name();
}
}
It works for me, but the thing is, the code is quite ugly (i mean the java
reflection part).
Does someone know a better way to do that?
Maybe Enums should be handled by struts by default? Why they aren't handled?
Any comments appreciated,
regards
Piotr