Подтвердить что ты не робот

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

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

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

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

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

-Dorg.apache.el.parser.COERCE_TO_ZERO = ложь

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

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

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

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

4b9b3361

Ответ 1

Программные свойства можно программно использовать с помощью 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.