How do I use an enum parameter in struts 2?
Question
I'm trying to get an Action in Struts 2 to work with an Enum as an input parameter. What I've done so far looks like:
public TestAction {
public enum Module {
VALUE1;
}
private Module module;
public void setModule(Module module) {
this.module = module;
}
public Module getModule() {
return module;
}
}
But when trying to use this I get an xwork conversion error, and the action itself doesn't even execute. Can I make this work as is, or should I provide setModule(String) myself?
Edit: I'm using struts 2.1.6 The URL I'm trying: /test.action?module=value1
Solution
It should bind a string to a enum straight away. I think the enum type converter has been in the default configuration since I think 2.1.x.
- What version of struts 2 are you using?
if you are unsure the following is in my xwork-conversion.properties
in a 2.0.14 app
java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter
EDIT: In response to the comment, if you need to ignore case for assigning an enum you have the following choices:
- Change the value of enum to actaully be lower case - not great style and could make your code look a bit weird
- Write a new case insensitive type converter for java.lang.Enum (just copy the xwork one and toUpper the input I guess)
- add a new setModule(String) for this specific case
OTHER TIPS
I just encounter a similar issue when forwarding from an action to a redirect action (instead of an action forward), Struts will not properly recognize I am using a parameter List<Enum>
and I had to use a proxy method to convert from the String parameter into a List<Enum>
.