2009-10-26 16 views
6

Sto cercando di ottenere un'azione in Struts 2 per lavorare con un Enum come parametro di input. Quello che ho fatto fino ad ora si presenta come:Come si usa un parametro enum nei montanti 2?

public TestAction { 
    public enum Module { 
    VALUE1; 
    } 

    private Module module; 

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

Ma quando si cerca di utilizzare questo ottengo un errore di conversione xwork, e l'azione stessa non ha nemmeno eseguo. Posso farlo funzionare così com'è, o dovrei fornire setModule (String) da solo?

Edit: sto usando puntoni 2.1.6 L'URL che sto cercando: /test.action?module=value1

risposta

5

Dovrebbe associare una stringa in un enum subito. Penso che il convertitore di tipo enum sia stato nella configurazione predefinita poiché penso che 2.1.x.

  • Quale versione di puntone 2 stai usando?

se non siete sicuri che segue è nel mio xwork-conversion.properties in un'applicazione 2.0.14

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

EDIT: In risposta al commento, se avete bisogno di ignorare caso per l'assegnazione di un enum voi hanno le seguenti scelte:

  • Modificare il valore della enum essere actaully minuscolo - non grande stile e potrebbe rendere il vostro codice di sembrare un po 'strano
  • Scrivi un nuovo convertitore di tipo caso insensitive per java.lang.Enum (basta copiare il xwork uno e toupper l'ingresso immagino)
  • aggiungere una nuova setModule (String) per questo caso specifico
+0

Scusa se ho dimenticato di menzionare che sto usando i puntoni 2.1.6. Ho letto che avrebbe dovuto funzionare fuori dagli schemi mentre su google, ma non funziona per me come l'ho usato nell'esempio sopra. Un problema intercettore forse? – wds

+0

A cosa assomiglia la stringa di query .. /myAction.action?module=VALUE1 * dovrebbe * solo un po 'funzionare, il binding della richiesta all'azione è il parametro intercettore, che se si ottiene un errore di conversazione allora deve essere già configurato –

+0

Okay non mi è venuto in mente in qualche modo di testare con VALUE1 invece di value1. Funziona davvero in questo modo. Immagino che EnumTypeConverter utilizzi Enum.valueOf, ma mi piacerebbe davvero che fosse ignorato il caso. – wds

0

ho appena Incontrare un problema simile durante l'inoltro da un'azione ad un'azione di reindirizzamento (invece di un'azione in avanti), Struts non riconoscerà correttamente Sto usando un parametro List<Enum> e ho dovuto usare un metodo proxy per convertire dal parametro String in un List<Enum>.