このエラーが発生します:
javax.servlet.ServletException: bean not found within scope
これが一番上にあるページ。
<jsp:useBean id="bean" type="com.example.Bean" scope="request" />
クラスはクラスパスに存在し、今朝は機能しましたが、スコープ内にないものが何を意味するのかわかりません。
これはどのように発生し、どうすれば解決できますか?
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
転送してください。
追加する必要があります
<jsp:useBean id="givingFormBean" type="some.packg.GivingForm" scope="request" />
デフォルトでは、Beanはページスコープで検索されるためです。