2012-09-13 14 views
6

Jaki jest najlepszy sposób przycinania tego ciągu/gdzie jest najlepsze miejsce na umieszczenie kodu przycinania?Przycinanie Struts2 tekstowy ciąg znaków

Say mam następujące pole tekstowe w moim jsp:

<s:textfield label="First Name" name="person.firstname"/> 

Klasa akcji:

public class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware { 
    private Person person; 
    // Getters, setters and action logic 
} 

Fasola:

public class Person implements Serializable { 
    private String lastname; 
    private String firstname; 
    // Getters and setters 
} 

mogę zmienić ustawienie domyślne w fasola, ale to wygląda jak włamanie:

public void setFirstname(String firstname) { 
    this.firstname = firstname.trim(); 
} 

EDIT: Zrobiłem również zobaczyć to pytanie: struts2 trim all string obtained from forms gdzie jest również sugerowane przez niektórych, że „poprawne” metoda polega na użyciu przechwytujących.

Dlaczego przechwytywacz jest "prawidłowy"? Co jest złego w zmianie ustawiaczy fasoli?

Odpowiedz

3

Krótka odpowiedź jest Nie domyślnie, nie ma budować w mechanizmie to zrobić i albo trzeba zrobić to w swojej klasie działania lub jakiegoś rodzaju-java-script zrobi to za Ciebie.

Innym możliwym sposobem jest stworzenie przechwytującego, aby to zrobić z opcją wykluczenia lub coś podobnego na podobnej wędrówce.

Uważam, że Interceptor to dobry sposób na zrobienie tego, lepiej jest mieć taki przechwytujący przychodzi z S2.

+0

Dzięki Umesh. Rozumiesz nieco swoją odpowiedź i wyjaśnisz, dlaczego przechwytywacz jest drogą do zrobienia? – nmc

+1

@ nmc Wdrażanie, że używanie przechwytywacza jest dobre, ponieważ możemy to zrobić w sposób ogólny i zastosować do dowolnego działania. –

6

Można to zrobić za pomocą Struts2 converters.

public class TrimmingStringConverter extends StrutsTypeConverter { 

    public Object convertFromString(Map ctx, String[] values, Class arg2) { 
     if (values != null && values.length > 0) { 
      return values[0].trim(); 
     } 

     return null; 
    } 

    public String convertToString(Map ctx, Object o) { 
     if (o != null) { 
      return o.toString(); 
     } 
     else { 
      return null; 
     } 
    } 

    public Object convertValue(Map context, Object o, Class toClass) 
    { 
     if (o == null) { 
      return null; 
     } else if (toClass == java.lang.String.class) { 
      if (o instanceof String[]) { 
       String[] os = (String[]) o; 

       if (os.length > 0) { 
        return os[0].trim(); 
       } 
      } 

      return o.toString().trim(); 
     } 

     return super.convertValue(context, o, toClass); 
    } 
} 

To musi być zarejestrowany w xwork-conversion.properties: java.lang.String = es.jogaco.webapp.TrimmingStringConverter

ta będzie stosowana do wszystko wejściowego użytkownika.

Będzie działać, jeśli masz domyślne przechwytywacze2. Cytat z Struts2 doc:

Domyślnie przechwytujących konwersji jest wliczone w Struts default.xml w domyślnym stosie

Plus mam to działa w moim Struts2 aplikacji.