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

¿Fue útil?

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>.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top