Work around für fehlerhafte INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL in Mojarra JSF 2.1
Ich weiß, es gibt eine Reihe von posts über das konvertieren von leerer Zeichenkette zu null in JSF2. Das übliche Rezept ist, fügen Sie die folgenden web.xml.
<context-param>
<description>Does not appear to work</description>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
Ist das einfach nicht zu funktionieren scheint - bei allen. Dann habe ich einen custom-string-Konverter, um zu testen, ob das funktionieren würde. Ich habe ausdrücklich Hinzugefügt, es als ein Wandler, um meine inputText (sonst wird es nicht ausgelöst wird, wenn das Feld leer).
Wenn INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL auf true gesetzt ist der Konverter erhält null ist, und die Set-Methode für die Eingabe von text erhält noch "".
Wenn INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL auf false gesetzt (oder auskommentiert) der Konverter erhält "" und die Set-Methode für die Eingabe von text erhält "" (auch, wenn die converter gibt null zurück).
@FacesConverter(forClass=java.lang.String.class, value="emptyStringToNull")
public class StringConverter implements Converter, Serializable {
private static final long serialVersionUID = -1121162636180944948L;
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value == null || value.trim().isEmpty()) {
return null;
}
return value;
}
public String getAsString(FacesContext context, UIComponent component, Object object) {
if (object == null)
return null;
return object.toString();
}
}
Ich habe die Veranstaltung versucht (ohne Erfolg) explizit die Komponente übermittelten Wert in getAsObject:
if (component instanceof EditableValueHolder)
((EditableValueHolder) component).setSubmittedValue(null);
Ich bin mit JBoss6 (eine Momentaufnahme von 6,1 wirklich) und JSF 2.1.1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht Mojarra bestimmten. Dies ist Tomcat-spezifische (JBoss verwendet Tomcat als servletcontainer). Fügen Sie den folgenden VM-argument zur startup-Optionen.
Meiner Erfahrung, sollte man dieses eigentlich gelten nur auf
Number
Eigenschaften (int, long, etc), aber da eine gewisse spät-Tomcat-6.0.x-version (zumindest nach 6.0.20) es scheint kaputt zu sein für die Saiten, so gut und es ist unter Berufung auf die oben genannten VM-argument.Auf GlassFish 3.x zum Beispiel, es funktioniert einwandfrei aus der box.
<ui:repeat>
, aber funktioniert, wenn ersetzt mit<c:forEach>
<ui:repeat>
in Mojarra. Versuchen Sie mit den neuesten MyFaces zu sehen ist, verhält es sich anders.JAVA_OPTS
Umgebungsvariable oder Bearbeiten Sie die Tomcat-Startskript oder wenn es ein Windows-Dienst, legen Sie Sie irgendwo in das Bedienfeld "Einstellungen" hinter der Apache Feder-systray-icon.