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 をスコープに入れる責任のある何かが機能しなくなったことを意味します。たとえば、 で次のことを行うサーブレットdoGet():

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

URL でサーブレットを呼び出すのではなく、URL で直接 JSP ページを呼び出した可能性があります。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 に答える