h: inputText que está vinculado a la propiedad String está enviando cadena vacía en lugar de nulo

Tengo una aplicación JSF 2.0 en Tomcat con muchos campos para ingresar datos en mi base de datos. Algunos campos no son obligatorios

    

Cuando el usuario deja este campo vacío, JSF establece la cadena vacía "" lugar de null .

¿Cómo puedo solucionar este comportamiento sin verificar cada String con

 if (string.equals("")) { string = null; } 

Puede configurar JSF 2.x para interpretar valores enviados vacíos como null por el siguiente parámetro de context-param en web.xml (que tiene un nombre bastante largo, que también será el motivo por el que no pude recuperarlo;)):

  javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL true  

Para referencia y para aquellos que están interesados, en JSF 1.2 (y por lo tanto no 1.1 o anterior porque es por diseño no es posible tener un Converter para java.lang.String ) esto es posible con el siguiente 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(); } } 

… que debe registrarse en faces-config.xml siguiente manera:

  java.lang.String com.example.EmptyToNullStringConverter  

En caso de que aún no esté en Java 6, reemplace submittedValue.empty() por submittedValue.length() == 0 .

Ver también

  • La locura de String vacía

Espero que esta sea la manera correcta de decir que no puedo encontrar una solución para el problema.

He agregado el context-param a mi web.xml pero no tiene ningún resultado. Utilizo un servidor Tomcat 6.0.24 con estos dos context-param: javax.faces.PROJECT_STAGE = Desarrollo javax.faces.VALIDATE_EMPTY_FIELDS = true