У меня есть приложение 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; }
Вы можете настроить 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
.
Надеюсь, это правильный способ сказать, что я не могу найти решение проблемы.
Я добавил context-param
в мой web.xml
, но это не дало никакого результата. Я использую сервер Tomcat 6.0.24 с этими двумя context-param: javax.faces.PROJECT_STAGE =
Development javax.faces.VALIDATE_EMPTY_FIELDS = true