You can configure JSF 2.x to interpret empty submitted values as null by the following context-param
in web.xml
(which has a pretty long name, that'll also be why I couldn't recall it ;) ):
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
For reference and for ones who are interested, in JSF 1.2 (and thus not 1.1 or older because it's by design not possible to have a Converter
for java.lang.String
) this is workaroundable with the following Converter
:
public class EmptyToNullConverter implements Converter {
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
if (value == null || value.trim().length() == 0) {
if (component instanceof EditableValueHolder) {
((EditableValueHolder) component).setSubmittedValue(null);
}
return null;
}
return value;
}
public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
return (value == null) ? null : value.toString();
}
}
...which needs to be registered in faces-config.xml
as follows:
<converter>
<converter-for-class>java.lang.String</converter-for-class>
<converter-class>com.example.EmptyToNullConverter</converter-class>
</converter>
For JDK6 purists, the value.trim().length() == 0
can also be replaced by value.trim().isEmpty()
;)