Временное решение для ошибочного INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL в Mojarra JSF 2.1

Я знаю, что есть ряд сообщений о преобразовании пустой строки в 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>

Это просто не работает - совсем. Затем я создал специальный преобразователь строк, чтобы проверить, будет ли это работать. Я явно добавил его как преобразователь в свой inputText (иначе он не срабатывает, когда он пуст).

Когда для параметра INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL установлено значение «истина», преобразователь получает значение NULL, а средство установки для входного текста по-прежнему получает «».

Когда для параметра 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.

11
задан BalusC 10 June 2011 в 21:28
поделиться