Посмотрите на самую нижнюю причину трассировки стека:
Caused by: java.lang.NullPointerException
at DAOKPI.TestAjax.createQueryOracle2(TestAjax.java:1201)
Откройте DAOKPI.TestAjax
класс и перейдите к createQueryOracle2()
методу. Строка 1201 должна выглядеть примерно так:
someObject.doSomething();
Это исключение пытается сообщить вам, что someObject
- это null
. Вам нужно исправить это, убедившись, что это , а не null
в точке, где вы это называете. Например, просто создав его экземпляр.
if (someObject == null) {
someObject = new SomeObject();
}
someObject.doSomething();
Вы также можете просто пропустить вызов, предварительно проверив, не является ли он null
.
if (someObject != null) {
someObject = new SomeObject();
}
Или, если оно представляет собой свойство управляемого компонента или какое-либо свойство внедрения зависимости, убедитесь, что области действия правильные и что инжектор выполнил свою работу.
Не связанный с конкретной проблемой, класс управляемых бинов с более чем 1201 строкой - это действительно дизайнерский запах. Рассмотрим рефакторинг. Например, поля формы могут входить в класс сущности / javabean. Бизнес-задачи могут идти в сервисном классе. Задачи взаимодействия с базой данных могут идти в классе DAO. Все, что может быть свойствами управляемого компонента.
Имена пакетов в верхнем регистре также не соответствуют соглашениям об именах Java . Кроме того, прямые выражения метода EL, такие как #{TestAjax.getMyListProject()}
и
#{TestAjax.fillReport2()}
безобразны, если вам не нужно передавать аргументы или вызывать не получателей, лучше используйте #{TestAjax.myListProject}
и
#{TestAjax.fillReport2}
. Наконец, имена управляемых JSF-компонентов должны начинаться со строчной буквы, поскольку они представляют собой только экземпляры класса: #{testAjax}
.