I have a JSF 2.0 application on Tomcat with many <h:inputText>
fields to input data in my database. Some fields are not required.
<h:inputText value="#{registerBean.user.phoneNumber}" id="phoneNumber"> <f:validateLength maximum="20" /> </h:inputText>
When the user leave this field empty JSF sets empty string ""
instead of null
.
How can I fix this behavior without checking every String with
if (string.equals("")) { string = null; }
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 EmptyToNullStringConverter implements Converter { public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) { if (submittedValue == null || submittedValue.isEmpty()) { if (component instanceof EditableValueHolder) { ((EditableValueHolder) component).setSubmittedValue(null); } return null; } return submittedValue; } public String getAsString(FacesContext facesContext, UIComponent component, Object modelValue) { return (modelValue == null) ? "" : modelValue.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.EmptyToNullStringConverter</converter-class> </converter>
In case you're not on Java 6 yet, replace submittedValue.empty()
by submittedValue.length() == 0
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With