Я знаю, что есть несколько сообщений о преобразовании пустой строки в null в JSF2. Обычным предписанием является добавление следующего в 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>
Это просто не работает - вообще. Затем я создал собственный преобразователь строк, чтобы проверить, будет ли это работать. Я явно добавил его в качестве конвертера в свой входной текст (в противном случае он не загорается, когда он пуст).
Если для параметра INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL установлено значение true, преобразователь получает нуль, а сеттер для входного текста все равно получает "".
Если для параметра INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL установлено значение false (или закомментировано), преобразователь получает ", а сеттер для ввода текста получает" " (даже после того, как конвертер возвращает значение null).
@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();
}
}
Я проверил событие (безрезультатно), чтобы явно указать переданное компонентом значение в getAsObject:
if (component instanceof EditableValueHolder)
((EditableValueHolder) component).setSubmittedValue(null);
Я использую JBoss6 (действительно снимок 6.1) и JSF 2.1.1.