2009-10-26 11 views
6

Próbuję uzyskać działanie w Struts 2, aby pracować z Enum jako parametr wejściowy. Co robiłem do tej pory wygląda następująco:Jak używać parametru wyliczeniowego w kolumnach 2?

public TestAction { 
    public enum Module { 
    VALUE1; 
    } 

    private Module module; 

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

Ale kiedy próbują wykorzystać ten pojawia się błąd konwersji xwork, a sama akcja nie ma nawet wykonać. Czy mogę zrobić to tak, jak jest, czy też powinienem sam dostarczyć SetModule (String)?

Edycja: używam Struts 2.1.6 adres URL Próbuję: /test.action?module=value1

Odpowiedz

5

Należy powiązać ciąg do wyliczenia razu. Myślę, że konwerter typu wyliczeniowego był w domyślnej konfiguracji, ponieważ myślę, że 2.1.x.

  • Jakich wersji kolumn 2 używasz?

jeśli nie jesteś pewien, co następuje w moim xwork-conversion.properties w 2.0.14 aplikacji

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

EDIT: W odpowiedzi na komentarz, jeśli trzeba zignorować sprawę do przypisywania enum ty Dostępne są następujące opcje:

  • zmienić wartość enum do actaully być małymi literami - nie wielki styl i może uczynić Twój kod wyglądać nieco dziwnie
  • Napisz nowy konwerter typu przypadek niewrażliwe na java.lang.Enum (wystarczy skopiować xwork jedno i TOUPPER wejście chyba)
  • dodać nowy setModule (string) w tym konkretnym przypadku
+0

Niestety, zapomniałem wspomnieć, że używam rozpórek 2.1.6. Czytałem, że miało to działać po wyjęciu z pudełka podczas googlowania, ale nie działa to dla mnie tak, jak użyłem go w powyższym przykładzie. Może problem przechwytywania? – wds

+0

Jak wygląda ciąg zapytania? /myAction.action?module=VALUE1 * powinien * po prostu trochę pracować, wiązanie rzeczy od żądania do akcji jest parametrem przechwytującym, który w przypadku otrzymania błędu konwersacji musi już być skonfigurowany –

+0

OK, nie przyszło mi do głowy, że testuję z VALUE1 zamiast value1. To rzeczywiście działa w ten sposób. Sądzę, że EnumTypeConverter używa Enum.valueOf, ale naprawdę chciałbym, żeby to było ignorowane. – wds

0

Właśnie spotkać podobny problem podczas przekazywania z działania do działania przekierowania (zamiast działania do przodu), Struts nie rozpoznają poprawnie Używam parametru List<Enum> i musiałem użyć metody proxy do konwersji z parametru String na List<Enum>.