Question

J'essaie de faire en sorte qu'une action dans Struts 2 utilise un énum en tant que paramètre d'entrée. Ce que j'ai fait jusqu'à présent ressemble à ceci:

public TestAction {
  public enum Module {
    VALUE1;
  }

  private Module module;

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

Mais lorsque j'essaie d'utiliser ceci, une erreur de conversion xwork se produit et l'action elle-même ne s'exécute pas. Puis-je faire fonctionner ce travail tel quel, ou devrais-je fournir moi-même setModule (String)?

Edit: j'utilise des jambes de force 2.1.6 L'URL que j'essaie: /test.action?module=value1

Était-ce utile?

La solution

Il devrait immédiatement lier une chaîne à une énumération. Je pense que le convertisseur de type enum est dans la configuration par défaut depuis 2.1.x.

  • Quelle version de struts 2 utilisez-vous?

si vous n'êtes pas sûr que ce qui suit se trouve dans mon xwork-conversion.properties app 2.0.14

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

MODIFIER : en réponse au commentaire, si vous devez ignorer la casse pour l'attribution d'une énumération, vous avez les choix suivants:

  • Changez la valeur de enum pour qu'elle soit en minuscule - pas très stylée et pourrait rendre votre code un peu bizarre
  • Ecrivez un nouveau convertisseur de type insensible à la casse pour java.lang.Enum (copiez simplement le fichier xwork et toUpper l'entrée, je suppose)
  • ajouter un nouveau setModule (String) pour ce cas spécifique

Autres conseils

Je viens de rencontrer un problème similaire lors du transfert d'une action à une action de redirection (au lieu d'une action suivante), Struts ne reconnaîtra pas correctement l'utilisation d'un paramètre List<Enum> et j'ai dû utiliser une méthode proxy pour effectuer la conversion le paramètre String dans un <=>.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top