Come uso un parametro enum in struts 2?
Domanda
Sto cercando di far funzionare un'azione in Struts 2 con un Enum come parametro di input. Quello che ho fatto finora sembra:
public TestAction {
public enum Module {
VALUE1;
}
private Module module;
public void setModule(Module module) {
this.module = module;
}
public Module getModule() {
return module;
}
}
Ma quando provo ad usare questo ottengo un errore di conversione di xwork e l'azione stessa non viene nemmeno eseguita. Posso farlo funzionare così com'è o devo fornire me stesso setModule (String)?
Modifica: sto usando struts 2.1.6 L'URL che sto provando: /test.action?module=value1
Soluzione
Dovrebbe legare immediatamente una stringa a un enum. Penso che il convertitore di tipi enum sia stato nella configurazione predefinita da quando penso 2.1.x.
- Quale versione di struts 2 stai usando?
se non sei sicuro, quanto segue è nella mia xwork-conversion.properties
in un'app 2.0.14
java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter
MODIFICA : in risposta al commento, se devi ignorare il caso per assegnare un enum hai le seguenti opzioni:
- Cambia il valore di enum in realtà in minuscolo - non è un ottimo stile e potrebbe rendere il tuo codice un po 'strano
- Scrivi un nuovo convertitore di tipi senza distinzione tra maiuscole e minuscole per java.lang.Enum (copia solo quello xwork e toUpper l'input suppongo)
- aggiungi un nuovo setModule (String) per questo caso specifico
Altri suggerimenti
Ho riscontrato un problema simile durante l'inoltro da un'azione a un'azione di reindirizzamento (anziché un'azione in avanti), Struts non riconoscerà correttamente che sto usando un parametro List<Enum>
e ho dovuto usare un metodo proxy per convertire da il parametro String in <=>.