Mam aplikację Struts 2 (JDK 1.7, Struts 2.2.1), która zawiera listę kryteriów filtrowania przechowywanych jako ciągi na mapie.Dlaczego Struts2 przekształca mój ciąg na tablicę ciągów?
Map< String, String > m_filters = new HashMap< String, String >();
public Map< String, String > getFilters() {
return m_filters;
}
mijam URL sformatowany tak:
Mimo że mapa ma zarówno główne typy & wartość określona jako String, próbując uzyskać wartość z tego
Map< String, String > filters = getFilters();
String value = filters.get("fromDate");
powoduje wyrzucenie tego wyjątku:
java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String
Odtworzyłem to w teście jednostkowym i potwierdziłem w debugerze, że Struts 2 wydaje się tworzyć String [1] zamiast String dla każdego z parametrów. to jest tablica ciągów o długości 1, przy czym jedynym ciągiem jest oczekiwana wartość (w tym przypadku "0").
Moje pytanie brzmi: Czy to błąd w Struts2, czy robię coś niepoprawnie?
Jeśli jest to błąd, czy istnieje znane obejście tego problemu?
Czy możesz wypróbować wartość ciągu = (java.lang.String) filters.get ("fromDate"); i biegnij? –
Problem polega na tym, że mapa zawiera ciągi znaków [], a nie ciągi znaków, mimo że są sparametryzowane (sp?) Za pomocą, więc wyraźny rzut nadal będzie powodował błąd. –
+1 btw, ponieważ to było interesujące Nie jestem pewien, czy zachowanie struts2 w tym przypadku jest najbardziej sensowne. To prawda, że powinieneś przestrzegać konwencji, ale prawdą jest również, że to, czego doświadczasz, nie jest intuicyjne. – Quaternion