Ответ 1
Ваша проблема отличается от того, что говорит книга. Если JSF/EL не смог полностью найти метод геттера, вы получили бы следующее исключение:
javax.el.PropertyNotFoundException: свойство 'books' не найдено по типу pl.ctrl.BookController
Или, если он не смог найти сам bean:
Но вместо этого вы получили:
javax.el.ELException: Ошибка чтения "книг" по типу pl.ctrl.BookController
Это означает, что был найден метод bean и getter, но вызов метода getter вызвал исключение. В основном, под оболочками JSF/EL происходит следующее:
try {
Object result = bookController.getBooks();
} catch (Exception e) {
throw new ELException("Error reading 'books' on type pl.ctrl.BookController", e);
}
Обратите внимание, что e
передается как причина ELException
. Исходное исключение, таким образом, должно быть видимым как "Caused by" далее в трассировке стека, которое вы не отправляли нигде в вопросе. Самый нижний из них является основной причиной всех и является ответом на вашу конкретную проблему. Если вы не можете его интерпретировать, просто скопируйте тип исключения и сообщение в подходящую поисковую систему, чтобы найти ответы и подсказки.
Несвязанный к конкретной проблеме, исключение, выведенное из метода геттера, в свою очередь указывает на рыбный код. Метод геттера не должен делать какую-либо исключающую чувствительность бизнес-логику. А именно, он может быть вызван несколько раз за жизнь bean и повторять ту же самую бизнес-логику много раз в течение всего bean, жизнь неэффективна. Прекратите это делать и переместите бизнес-логику на одноразовую процедуру инициализации или действия/события. Метод getter должен просто вернуть уже подготовленное свойство. См. Также Почему JSF вызывает геттеры несколько раз и Как и когда следует загружать модель из базы данных для h: dataTable.