Warum ist @FacesConverter(forClass=String.class) funktioniert nicht
Folgte ich dem Beispiel hier: Warum <h:inputText required="true"> lassen Sie leere Räume? zu einem "Global" - Konverter zu trimmen alle Eingabe-Felder. Allerdings ist der Konverter wird nicht aufgerufen, wenn die Eingabe-Felder sind eingereicht.
@FacesConverter(forClass=String.class)
...
<p:inputText value="#{controller.inputValue}"/>
aber wenn ich auf:
@FacesConverter("StringTrimmer")
...
<p:inputText value="#{controller.inputValue}" converter="StringTrimmer"/>
es funktioniert.
Mit Mojarra 2.1.7 und PrimeFaces 3.2
- Ist die
inputValue
wirklich der TypString
? - Das war es.. (Dachte, es war-String-war es nicht). Thx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Konverter mit einem
forClass
wird nur aufgerufen, wenn der Typ der Eigenschaft ist eine Instanz der angegebenen Klasse. In Ihrem Fall, das kann nur bedeuten, dass die#{controller.inputValue}
ist nicht der TypString
.Wenn Sie überprüft haben, dass die gebundene variable ist vom Typ String und der Konverter noch nicht genannt, Sie können auch die folgenden:
Wenn die input-Komponente gekapselt in einer zusammengesetzten Komponente, die Sie haben können dieses Problem. In diesem Fall, Konverter wäre nicht richtig aufgerufen worden, was in Ihre eigene Methode zu sein, nie erreicht. Aufruf der Konverter explizit auf die input-Komponente löst dieses.
Wenn Sie beide
value="someName"
undforClass="someClass"
zu den@FacesConverter
annotation, die forClass-Attribut ignoriert. Dies wurde hier berichtet.Diese nicht funktioniert, weil die inputValue war eigentlich nicht der Typ String. Einmal geändert, um den Typ String-- es funktionierte.