18

我收到此错误:

javax.servlet.ServletException: bean not found within scope

在顶部带有此的页面上。

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

该类存在于类路径中,它今天早上工作,我不明白在范围内找不到的意思。

这是如何引起的,我该如何解决?

4

2 回答 2

35

您需要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 放入范围的东西已经停止工作。例如,一个 servlet 在 中执行以下操作doGet()

request.setAttribute("bean", new Bean());
request.getRequestDispatcher("page.jsp").forward(request, response);

也许您已经通过 URL 直接调用 JSP 页面,而不是通过 URL 调用 Servlet。如果您想禁用对 JSP 页面的直接访问,请将它们放入/WEB-INF并转发给它。

于 2010-06-12T16:44:41.120 回答
1

您必须添加

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

因为默认情况下,bean 是页面范围内查看的

于 2009-05-24T17:18:31.407 回答