Мы используем a h:inputText
на странице JSF, которая связывается с Integer
свойство (и таким образом может принять null
). Когда нет никакого значения, записанного в h:inputText
, форма отправляет a 0
вместо null
. Мы используем Тринидад 1.2.2 и Tomcat 6.0.20 (мы также попробовали Tomcat 6.0.14, поскольку мы читаем, что это могло произойти с certains версиями Tomcat).
Как это вызывается и как я могу решить его?
Эта "особенность" была результатом исправления ошибки в EL, которая была введена в Tomcat 6.0.16. Согласно главе 1.18.3 спецификации EL, значение типа number, которое является null
, должно принудительно приводиться к 0. До Tomcat 6.0.16 оно "неправильно" приводилось к пустой строке.
В конце концов, пустая строка была гораздо более интуитивно понятна, чем ноль. Ребята из Tomcat в Apache получили много жалоб на это исправление, поэтому они ввели новый параметр конфигурации в виде аргумента VM в Tomcat 6.0.17, который отключает это исправление.
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
Я, кстати, попросил внести изменение в эту спецификацию, чтобы она принудительно приводила пустые/нулевые примитивные типы к нулю и пустые/нулевые непримитивные java.lang.Number
типы к пустой строке: JSP EL issue 184. Они мало что с этим сделали, но вопрос, по крайней мере, набрал много голосов. Кто знает... Такое поведение, по крайней мере, действительно раздражает, потому что оно неинтуитивно понятно.