2010-06-11 13 views
9
org.apache.jasper.JasperException: /index.jsp(1,1) The value for the useBean class attribute com.b5 is invalid. 
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40) 
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407) 
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148) 
    org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1272) 
    org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1178) 
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361) 
    org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411) 
    org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417) 
    org.apache.jasper.compiler.Node$Root.accept(Node.java:495) 
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361) 
    org.apache.jasper.compiler.Generator.generate(Generator.java:3426) 
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:216) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:332) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:312) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:299) 
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

¿Alguien puede explicar la causa y la solución de este problema?JasperException: El valor para el atributo de clase useBean no es válido

+0

¿podría publicar el código que está causando este error? – gruntled

Respuesta

11
 
The value for the useBean class attribute com.b5 is invalid. 

para que tenga una

<jsp:useBean id="b5" class="com.b5" /> 

Esta excepción es típico cuando la siguiente pasando "entre bastidores" falla:

com.b5 b5 = new com.b5(); 

Aparte del requisito de que debe ser colocado en el interior un paquete (que por lo tanto lo hizo correctamente), el bean debería ser una clase public y tener un constructor (no implícito) public no-arg. Es decir.

package com; 

public class b5 { 
    public b5() { 
     // Default constructor. 
    } 
} 

Normalmente, este constructor ya está presente, pero se ocultará cada vez que agregue otros constructores que tomen otros argumentos. Luego deberá agregarlo usted mismo de forma explícita.

Otra posible causa es que la clase de bean no se puede encontrar en el classpath de tiempo de ejecución. Si este es su propio bean, asegúrese de que su archivo class se encuentre en /WEB-INF/classes/com/b5.class. Asegúrese también de que el nombre completo calificado com.b5 sea literalmente correcto, es sensible a mayúsculas y minúsculas.

Debe buscar un poco más en la pila de pila para conocer la causa exacta del problema. Dirígete a las partes root cause o caused by en la parte inferior de la traza.


Dicho esto (y sin relación con el problema real), el nombre de clase b5 es una opción bastante pobre. Debe ser un nombre razonable que comience con mayúsculas, p. User, Product, Order, etc.

+0

Hola! Estoy con el mismo problema, pero mis 'clases' no se encuentran dentro de la carpeta' WEB-INF'. Sin embargo, no quiero cambiar la ubicación de mi carpeta de clases. ¿Conoces alguna forma de precompilar los archivos jsp que tienen una ubicación diferente para las clases dir? –

1

Acabo de tener el mismo problema. Además de lo anterior, asegúrese de recordar que configuró su clase en "público"

0

Tuve el mismo problema y, como se destacó anteriormente, olvidé agregar el constructor predeterminado porque había agregado uno anulado.

Java básico, el compilador agrega un constructor no arg predeterminado en cada clase que cree, excepto cuando agrega explícitamente un constructor.

1

en lugar de
<jsp:useBean id="b5" class="com.b5" />
uso
<jsp:useBean id='b5'>
<jsp:attribute name="class" trim="true">com.b5</jsp:attribute>
</jsp:useBean>

también reiniciar el servidor Tomcat después de los cambios

4

Trate tipo en lugar de clase

La diferencia según la documentación:

class = "package.class" type = "package.class" Crea una instancia de un bean de la clase nombrada en clase y asigna al bean el tipo de datos que especifica en tipo.El valor de tipo puede ser el mismo que el de clase, una superclase de clase o una interfaz implementada por clase. La clase que especifique en clase no debe ser abstracta y debe tener un constructor público sin argumento. Los nombres de paquete y clase que utiliza con clase y tipo distinguen entre mayúsculas y minúsculas. beanName = "{package.class |}" type = "package.class" Instancia un bean de una clase, una plantilla serializada o una expresión que se evalúa como una clase o plantilla serializada. Cuando usas beanName, el bean es instanciado por el método java.beans.Beans.instantiate. El método Beans.instantiate comprueba si el paquete y la clase que especifica representan una clase o una plantilla serializada. Si representan una plantilla serializada, Beans.instantiate lee el formulario serializado (que tiene un nombre como package.class.ser) usando un cargador de clases. El valor de tipo puede ser el mismo que beanName, una superclase de beanName, o un interfaz implementada por beanName. Los nombres de paquete y clase que usa con beanName y type distinguen entre mayúsculas y minúsculas.
0

su espacio de trabajo tienen la clase que necesita en useBean, por lo que durante el trabajo no va a lanzar ningún mensaje de error. Pero cuando implementó la aplicación se implementó según el archivo deploy.properties. Es posible que su clase que utilizó en useBean no se implemente. Compruebe su archivo deploy.properties. ¡Espero que funcione!

Cuestiones relacionadas