Comment utiliser un paramètre enum dans struts 2?
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
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 <=>.