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.

Schreibe einen Kommentar