Question

Je reçois cette erreur:

javax.servlet.ServletException: bean not found within scope

sur une page avec cela en haut.

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

La classe existe dans le classpath, cela a fonctionné ce matin et je ne comprends pas ce que l'on ne trouve pas dans le champ d'application.

Comment cela est-il causé et comment puis-je le résoudre?

Était-ce utile?

La solution

Vous avez besoin de l'attribut class au lieu de l'attribut type .

Les éléments suivants:

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

fait essentiellement ce qui suit dans les coulisses:

Bean bean = (Bean) pageContext.getAttribute("bean", PageContext.REQUEST_SCOPE);

if (bean == null) {
    throw new ServletException("bean not found within scope");
}

// Use bean ...

Alors que ce qui suit:

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

fait essentiellement ce qui suit dans les coulisses:

Bean bean = (Bean) pageContext.getAttribute("bean", PageContext.REQUEST_SCOPE);

if (bean == null) {
    bean = new Bean();
    pageContext.setAttribute("bean", bean, PageContext.REQUEST_SCOPE);
}

// Use bean ...

Si cela a fonctionné auparavant et que cela n'a pas fonctionné "tout à coup", cela signifie que quelque chose qui est responsable de l'insertion du bean dans le périmètre a cessé de fonctionner. Par exemple, un servlet qui fait ce qui suit dans le doGet () :

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

Peut-être avez-vous appelé la page JSP directement par URL au lieu d'appeler le servlet par URL. Si vous souhaitez désactiver l'accès direct aux pages JSP, insérez-les dans / WEB-INF et transférez-les à la place.

Autres conseils

Vous devez ajouter

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

Parce que par défaut, le bean est consulté sur le page étendue

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top