2012-09-13 11 views
6

Was ist der beste Weg, um diese Zeichenfolge zu trimmen/wo ist der beste Ort, um den Trim-Code zu setzen?Trimming Struts2 Textfeld Zeichenfolge Eingabe

sagen, dass ich das vorgesehene Feld in meiner jsp haben:

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

Die Action-Klasse:

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

Die Bohne:

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

Ich kann in der Standardeinstellung ändern Bean, aber das scheint wie ein Hack:

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

EDIT: Ich habe auch diese Frage sehen: struts2 trim all string obtained from forms wo es auch von einigen vorgeschlagen hat, dass die „richtige“ Methode ist es, einen Abfangjäger zu verwenden.

Warum ist ein Interceptor der "richtige" Weg? Was ist falsch daran, die Setter der Bohne zu ändern?

Antwort

3

Kurze Antwort ist Nicht standardmäßig, es gibt keinen eingebauten Mechanismus, um dies zu tun, und Sie müssen es entweder in Ihrer Aktionsklasse tun oder irgendeine Art von Java-Skript wird das für Sie tun.

Eine andere Möglichkeit besteht darin, einen Interceptor zu erstellen, der dies mit einer Option zum Ausschließen oder Ähnlichem auf einem ähnlichen Treck ermöglicht.

Ich glaube Interceptor ist ein guter Weg, dies zu tun, ist es besser, solche Interceptor kommt mit S2.

+0

Danke Umesh. Denken Sie darüber nach, Ihre Antwort etwas zu erweitern und zu erklären, warum Interceptor der richtige Weg ist? – nmc

+1

@nmc Die Implementierung dieses Interceptors ist eine gute Sache, weil wir es generisch machen und auf jede Aktion anwenden können. –

6

Es kann mit Struts2 converters getan werden.

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); 
    } 
} 

Es muss in xwork-conversion.properties registriert werden: java.lang.String = es.jogaco.webapp.TrimmingStringConverter

Dies wird alle Benutzereingabe angewendet werden.

Es funktioniert, wenn Sie die Standard-Struts2 Interzeptoren haben. Zitat von struts2 doc:

Standardmäßig ist die Umwandlung Abfangjäger in Streben-default.xml im Standard-Stack enthalten

Plus Ich habe es in meinem struts2 App arbeiten.

Verwandte Themen