¿Cómo uso un parámetro de enumeración en struts 2?
Pregunta
Estoy intentando que una acción en Struts 2 funcione con una enumeración como parámetro de entrada.Lo que he hecho hasta ahora se parece a:
public TestAction {
public enum Module {
VALUE1;
}
private Module module;
public void setModule(Module module) {
this.module = module;
}
public Module getModule() {
return module;
}
}
Pero cuando intento usar esto, aparece un error de conversión de xwork y la acción en sí ni siquiera se ejecuta.¿Puedo hacer que esto funcione como está o debería proporcionar setModule(String) yo mismo?
Editar:Estoy usando Struts 2.1.6 La URL que estoy intentando:/test.action?module=valor1
Solución
Debería unir una cadena a una enumeración de inmediato. Creo que el convertidor de tipo enum ha estado en la configuración predeterminada desde que creo 2.1.x.
- ¿Qué versión de struts 2 estás usando?
si no está seguro, lo siguiente está en mi xwork-conversion.properties
en una aplicación 2.0.14
java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter
EDITAR : en respuesta al comentario, si necesita ignorar el caso para asignar una enumeración, tiene las siguientes opciones:
- Cambie el valor de enum para que sea minúscula, no es un gran estilo y podría hacer que su código se vea un poco extraño
- Escriba un nuevo convertidor de tipo que no distinga entre mayúsculas y minúsculas para java.lang.Enum (simplemente copie el xwork one y para subir la entrada, supongo)
- agregue un nuevo setModule (String) para este caso específico
Otros consejos
Me encuentro con un problema similar al reenviar desde una acción a una acción de redireccionamiento (en lugar de una acción hacia adelante). Struts no reconoce correctamente que estoy usando un parámetro. List<Enum>
y tuve que usar un método proxy para convertir del parámetro String a un List<Enum>
.