jsp - tutorial - JasperException: el valor para el atributo de clase useBean no es válido
jsp tutorial (6)
Acabo de tener el mismo problema. Además de lo anterior, asegúrese de recordar que configuró su clase como "pública"
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?
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 sin argumentos predeterminado en cada clase que creas, excepto cuando agregas explícitamente un constructor.
en lugar de
<jsp:useBean id="b5" class="com.b5" />
utilizar
<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
The value for the useBean class attribute com.b5 is invalid.
Entonces tienes un
<jsp:useBean id="b5" class="com.b5" />
Esta excepción es típica cuando falla lo siguiente "detrás de escena":
com.b5 b5 = new com.b5();
Además del requisito de que debe colocarse dentro de un paquete (lo que correctamente hiciste), el bean debería ser una clase public
y tener un constructor no-arg public
(implícito). Es decir
package com;
public class b5 {
public b5() {
// Default constructor.
}
}
Normalmente este constructor ya está presente, pero esto 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 la ruta de clase de tiempo de ejecución. Si este es su propio bean, asegúrese de que su archivo de class
esté ubicado en /WEB-INF/classes/com/b5.class
. También asegúrese de que el nombre calificado completo com.b5
sea literalmente correcto, es sensible a mayúsculas y minúsculas.
Debería mirar un poco más allá en la pila de pila para conocer la causa exacta del problema. Diríjase a la root cause
o caused by
partes 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, por ejemplo, User
, Product
, Order
, etc.
Su espacio de trabajo tiene la clase que necesitaba en uso Bean, de modo que durante el trabajo no arrojará 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. Verifique su archivo deploy.properties. ¡Espero que funcione!
Intenta escribir 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 le asigna al bean el tipo de datos que especifique en type. 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" Crea una instancia de 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 una interfaz implementada por beanName. Los nombres de paquete y clase que usa con beanName y type distinguen entre mayúsculas y minúsculas.