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

Reply via email to