Ответ 1
Вы можете настроить JSF 2.x на то, чтобы интерпретировать пустые представленные значения как null следующими context-param
в web.xml
(который имеет довольно длинное имя, это также может быть почему я не мог его вспомнить;))
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
Для справки и для тех, кто интересуется, в JSF 1.2 (и, следовательно, не 1,1 или старше, потому что по дизайну невозможно иметь Converter
для java.lang.String
), это обходное решение со следующим 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();
}
}
... который должен быть зарегистрирован в faces-config.xml
следующим образом:
<converter>
<converter-for-class>java.lang.String</converter-for-class>
<converter-class>com.example.EmptyToNullStringConverter</converter-class>
</converter>
Если вы еще не на Java 6, замените submittedValue.empty()
на submittedValue.length() == 0
.