2009-10-26 10 views
6

Estoy tratando de obtener una Acción en Struts 2 para trabajar con un Enum como parámetro de entrada. Lo que he hecho hasta ahora es así:¿Cómo uso un parámetro enum en struts 2?

public TestAction { 
    public enum Module { 
    VALUE1; 
    } 

    private Module module; 

    public void setModule(Module module) { 
    this.module = module; 
    } 
    public Module getModule() { 
    return module; 
    } 
} 

Pero cuando se trata de utilizar este recibo un error de conversión XWork, y la acción en sí misma ni siquiera ejecutar. ¿Puedo hacer que esto funcione como está, o debería proporcionar setModule (String) a mí mismo?

Editar: Estoy usando puntales 2.1.6 La URL que estoy tratando: /test.action?module=value1

Respuesta

5

Debe unir una cadena a una enumeración de inmediato. Creo que el convertidor de tipo enum ha estado en la configuración predeterminada, ya que creo que 2.1.x.

  • ¿Qué versión de struts 2 estás utilizando?

si no está seguro de la siguiente es en mi xwork-conversion.properties en una aplicación 2.0.14

java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter 

EDITAR: En respuesta a la observación, si es necesario ignorar el caso de la asignación de una enumeración que tienen las siguientes opciones:

  • Cambiar el valor de enumeración ser convenientemente indicado en minúscula - no es un gran estilo y podría hacer que el código parezca un poco raro
  • Escribe un convertidor de tipo caso insensible para java.lang.Enum (sólo tienes que copiar el XWork uno y toUpper la entrada supongo)
  • añadir un nuevo setModule (String) para este caso específico
+0

Lo siento, olvidé mencionar que estoy usando struts 2.1.6. Leí que se suponía que funcionara de la caja mientras se busca en Google, pero no funciona para mí tal como lo usé en el ejemplo anterior. ¿Un problema de interceptor? – wds

+0

¿Cómo se ve la cadena de consulta ... /myAction.action?module=VALUE1 * debería * simplemente funcionar un poco, vinculando cosas de la solicitud a la acción es el interceptor de parámetros, que si se obtiene un error de conversación, entonces ya debe ser configurado –

+0

Está bien, no se me ocurrió de alguna manera probar con VALUE1 en lugar de value1. De hecho, funciona de esa manera. Supongo que EnumTypeConverter usa Enum.valueOf, pero me gustaría que ignore el caso. – wds

0

acabo encontrar un problema similar al reenviar de una acción a una acción de redireccionamiento (en lugar de una acción adelante), Struts no reconocerá correctamente Estoy usando un parámetro List<Enum> y tuve que usar un método proxy para convertir el parámetro String en List<Enum>.

Cuestiones relacionadas