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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top