Работайте для неисправной интерпретации_ампти_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>
Это просто не работает - вообще. Затем я создал индивидуальный конвертер строк, чтобы проверить, сработает ли это. Я явно добавил его в качестве преобразователя в свой входной текст (в противном случае он не стреляет, когда будет пустым).
Когда интерпретация_ампти_STRING_SUBMITTED_VALUES_AS_NULL устанавливается на TRUE, преобразователь получает NULL, а установщик для входного текста по -прежнему получает ».
При интерпретации_ампти_STRING_SUBMITTED_VALUES_AS_NULL установлено значение FALSE (или Complys Out), преобразователь получает «», а установщик для получения ввода текста получает »(даже после возврата преобразователя 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.
Решение
Это не моджарра. Это специфично Tomcat (JBoss использует Tomcat в качестве сервискона). Добавьте следующий аргумент VM в параметры запуска.
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
К моему опыту, этот должен фактически только применить Number
Свойства (int, long и т. Д.) Однако, поскольку определенная версия Tomcat 6.0.x (по крайней мере, после 6.0.20), она, по -видимому, также нарушена для строк, и она полагается на аргумент вышеуказанного виртуальной машины.
На Glassfish 3.x, например, он отлично работает.