h: inputText, который связан со свойством String, передает пустую строку вместо нуля - PullRequest
20 голосов
/ 05 февраля 2010

У меня есть приложение 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; }

Ответы [ 2 ]

49 голосов
/ 05 февраля 2010

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

Смотри также

0 голосов
/ 08 февраля 2010

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

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

...