javax.servlet.ServletException: бин [имя] не найден в области видимости - PullRequest
16 голосов
/ 07 ноября 2008

Я получаю эту ошибку:

javax.servlet.ServletException: bean not found within scope

на странице с этим вверху.

<jsp:useBean id="bean" type="com.example.Bean" scope="request" />

Класс существует в classpath, он сработал сегодня утром, и я не понимаю, что не найдено в области видимости.

Как это вызвано и как я могу решить?

Ответы [ 2 ]

32 голосов
/ 12 июня 2010

Вам нужен атрибут 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 и отправьте на него.

1 голос
/ 24 мая 2009

Вы должны добавить

<jsp:useBean id="givingFormBean" type="some.packg.GivingForm" scope="request" />

Поскольку по умолчанию bean-компонент выглядит на странице scope

...