h:inputText, который связывается со Свойством строки, отправляет пустую строку вместо пустого указателя

У меня есть приложение JSF 2.0 на Tomcat со многими <h:inputText> поля к входным данным в моей базе данных. Некоторые поля не требуются.

<h:inputText value="#{registerBean.user.phoneNumber}" id="phoneNumber">
    <f:validateLength maximum="20" />
</h:inputText>

Когда пользовательский отпуск это поле пустой JSF устанавливает пустую строку "" вместо null.

Как я могу зафиксировать это поведение, не проверяя каждую Строку с

if (string.equals("")) { string = null; }
20
задан BalusC 18 March 2016 в 09:44
поделиться

2 ответа

Вы можете настроить JSF 2.x для интерпретации пустых отправленных значений как нулевых с помощью следующего контекстного параметра в сети. 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, замените submitValue.empty () на submitValue .length () == 0 .

См. Также

49
ответ дан 29 November 2019 в 23:19
поделиться

Надеюсь, это правильный способ сказать, что я не могу найти решение проблемы.

Я добавил context-param в мой web.xml, но это не дало никакого результата. Я использую сервер Tomcat 6.0.24 с этими двумя context-param: javax.faces.PROJECT_STAGE = Development javax.faces.VALIDATE_EMPTY_FIELDS = true

0
ответ дан 29 November 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: