Я получаю такую ошибку:
javax.servlet.ServletException: bean not found within scope
на странице с этим вверху.
<jsp:useBean id = "bean" type = "com.example.Bean" scope = "request" />
Класс существует в пути к классам, он работал сегодня утром, и я не понимаю того, что не было найдено в пределах области видимости.
Как это вызвано и как я могу решить эту проблему?




Вы должны добавить
<jsp:useBean id = "givingFormBean" type = "some.packg.GivingForm" scope = "request" />
Потому что по умолчанию bean-компонент посмотрел прицел страница
Вам нужен атрибут 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 ...
Если он работал раньше и не работал «внезапно», то это означает, что что-нибудь, отвечающий за размещение bean-компонента в области видимости, перестал работать. Например, сервлет, который в doGet() выполняет следующие действия:
request.setAttribute("bean", new Bean());
request.getRequestDispatcher("page.jsp").forward(request, response);
Возможно, вы вызывали страницу JSP напрямую по URL-адресу, а не вызывали сервлет по URL-адресу. Если вы хотите отключить прямой доступ к страницам JSP, поместите их в /WEB-INF и пересылайте на него.
Хотя уже слишком поздно, но действительно отличное объяснение @BalusC