Как установить -Dorg.apache.el.parser.COERCE_TO_ZERO = false программно - PullRequest
25 голосов
/ 07 марта 2011

Этот вопрос похож на:

jsf: целочисленное свойство, привязанное к тексту ввода в пользовательском интерфейсе, установлено равным нулю при отправке

, но я не полностью удовлетворенрешение.Контексты одинаковые: у меня есть веб-форма, требующая целочисленного значения.Если текстовое поле оставлено пустым, я хочу, чтобы мое поле Integer было «нулевым», но вместо этого EL Parser автоматически устанавливает для моего поля id значение «0».

Я могу решить эту проблему, установив параметр JVM в моемлокальная виртуальная машина Tomcat:

-Dorg.apache.el.parser.COERCE_TO_ZERO = false

Однако это не будет работать на компьютере нашего клиента.Можно ли установить / изменить этот параметр JVM "in-code".

Обновление: Я обнаружил, что это запрашивается, но если у кого-то еще есть какой-либо другой обходной путь, я быМне тоже нравится это слышать.

https://issues.apache.org/bugzilla/show_bug.cgi?id=48813

Обновление 2: Я не могу изменить значение обратно с «0» на «ноль», потому что мойПриложение должно обрабатывать '0' как фактический идентификатор.Поэтому мне нужно знать во время выполнения, оставлено ли текстовое поле id пустым или нет.

1 Ответ

44 голосов
/ 07 марта 2011

Вы можете установить системные свойства программно, используя System#setProperty().

System.setProperty("org.apache.el.parser.COERCE_TO_ZERO", "false");

Однако вам необходимо убедиться, что это было установлено до JSF /EL когда-нибудь инициализируется.Лучшим местом будет ServletContextListener.

public class Config implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        System.setProperty("org.apache.el.parser.COERCE_TO_ZERO", "false");
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // NOOP
    }

}

Зарегистрируйте его как <listener> в web.xml или, если вы уже используете Servlet 3.0 (Tomcat 7 и так далее), с аннотацией @WebListener.

...