2010-01-08 12 views
7

HALLO Trimmen,JSF weißen Räumen

Ich habe ein Eingabefeld, in dem ich alle Vorder-/Hinter Leerzeichen trimmen wollen. Wir sind mit JSF und Bindung des Eingabefeldes auf einen Träger Bohne in der jsp mit:

<h:inputText id="inputSN" value="#{regBean.inputSN}" maxlength="10"/> 

Meine Frage ist, dass neben Validierung kann dies in der jsp getan werden? Ich weiß, dass wir das auch mit der trim() - Java-Funktion im Handler machen können, aber ich frage mich, ob es eine elegantere Möglichkeit gibt, dies in JSF zu erreichen.

Danke.

+0

Ich löste dies, indem ich nur die Funktion trim() im Handler benutzte, bevor ich irgendeine Verarbeitung ausführte. Danke für die alternative Idee, obwohl McDowell. – msharma

Antwort

6

Sie könnten eine Converter (tutorial) verwenden.

+3

Und registrieren Sie es mit 'converter-for-class' für' java.lang.String', so dass Sie es nicht für jede 'UIInput'-Komponente definieren müssen. – BalusC

+0

Was ist dieser Konverter für seine Klasse? klingt cool – Martlark

+1

@Martlark - es ist ein Element in 'faces-config.xml' verwendet. Aus der Spezifikation: _/faces-config/converter - Erstellen oder ersetzen Sie eine Konverter-ID/Konverter-Klasse oder ein Zielklasse/-konverter-Klassenpaar mit der Anwendungsinstanz für diese Webanwendung._ Auch: _Das "Converter-for-class" -Element repräsentiert der vollständig qualifizierte Klassenname, für den eine Converter-Klasse registriert wird. Weitere Informationen finden Sie in der JSF-Spezifikation. – McDowell

1

Ich löste dies, indem ich nur die Funktion trim() im Handler verwendete, bevor ich irgendeine Verarbeitung ausführte. es schien einfach der einfachste Weg, dies zu tun.

+2

Sie sollten dies als akzeptierte Antwort markieren, wenn dies die richtige Antwort ist. –

+0

Welcher Handler ??? –

2

antwortete ich eine ähnliche Frage here

Grundsätzlich können Sie entweder Ihre eigene Komponente erstellen, die eine Kopie von input ist, die automatisch trimmt, oder Sie können die input erweitern und trim Attribut, das wenn sie wahr trimmt hinzuzufügen.

4

Wie von McDowell und BalusC vorgeschlagen, können Sie einen Konverter erstellen und ihn mit @FacesConvert-Annotation für die String-Klasse registrieren. Und dann in der GetAsObject-Methode den UIComponent-Typ überprüfen und das Trimmen nur für die HtmlInputText-Komponenten anwenden.

@FacesConverter(forClass = String.class) 
public class StringTrimConverter implements Serializable, javax.faces.convert.Converter { 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent cmp, String value) { 

     if (value != null && cmp instanceof HtmlInputText) { 
      // trim the entered value in a HtmlInputText before doing validation/updating the model 
      return value.trim(); 
     } 

     return value; 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent cmp, Object value) { 

     if (value != null) { 
      // return the value as is for presentation 
      return value.toString(); 
     } 
     return null; 
    } 

} 
+1

Oder, wenn Sie nicht selbst programmieren möchten, finden Sie unter http://showcase.omnifaces.org/converters/TrimConverter –

Verwandte Themen