javax.servlet.ServletException: bean [имя] не найден в области видимости
Я получаю эту ошибку:
javax.servlet.ServletException: bean not found within scope
на странице с этим вверху.
<jsp:useBean id="bean" type="com.example.Bean" scope="request" />
Класс существует в classpath, он сработал сегодня утром, и я не понимаю, что не найдено в области видимости.
Как это вызвано и как я могу решить это?
2 ответа
Вам нужно class
атрибут вместо type
приписывать.
Следующие:
<jsp:useBean id="bean" type="com.example.Bean" scope="request" />
делает в основном следующее за кадром:
Bean bean = (Bean) pageContext.getAttribute("bean", PageContext.REQUEST_SCOPE);
if (bean == null) {
throw new ServletException("bean not found within scope");
}
// Use bean ...
Пока следующее:
<jsp:useBean id="bean" class="com.example.Bean" scope="request" />
делает в основном следующее за кадром:
Bean bean = (Bean) pageContext.getAttribute("bean", PageContext.REQUEST_SCOPE);
if (bean == null) {
bean = new Bean();
pageContext.setAttribute("bean", bean, PageContext.REQUEST_SCOPE);
}
// Use bean ...
Если он работал раньше и не работал "внезапно", то это означает, что что- то, отвечающее за помещение компонента в область действия, перестало работать. Например, сервлет, который делает следующее в doGet()
:
request.setAttribute("bean", new Bean());
request.getRequestDispatcher("page.jsp").forward(request, response);
Возможно, вы вызывали страницу JSP напрямую по URL, а не по сервлету по URL. Если вы хотите отключить прямой доступ к страницам JSP, поместите их в /WEB-INF
и вперед, вместо этого.
Вы должны добавить
<jsp:useBean id="givingFormBean" type="some.packg.GivingForm" scope="request" />
Потому что по умолчанию боб просматривается в области видимости страницы