2010-06-11 12 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) 

Qualcuno può spiegare la causa e la soluzione di questo problema?JasperException: il valore dell'attributo useBean non è valido

+0

si potrebbe pubblicare il codice che causa questo errore? – gruntled

risposta

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

in modo da avere un

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

Questa eccezione è tipico quando il seguente accade "dietro le quinte" fallisce:

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

Oltre al requisito che dovrebbe essere collocato all'interno un pacchetto (cosa che hai fatto correttamente), il bean dovrebbe essere esso stesso una classe public e avere un costruttore (implicito) public no-arg. Cioè

package com; 

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

Normalmente questo costruttore è già presente, ma questo sarà nascosto ogni volta che si aggiungono altri costruttori che prendono altri argomenti. Dovrai quindi aggiungerlo esplicitamente.

Un'altra possibile causa è che la classe bean non può essere trovata nel percorso di classe di runtime. Se questo è il tuo bean, assicurati che il suo file class si trovi in ​​/WEB-INF/classes/com/b5.class. Assicurarsi inoltre che il nome completo completo com.b5 sia letteralmente corretto, è sensibile al maiuscolo/minuscolo.

Si dovrebbe cercare un po 'più nello stacktrace per la causa esatta del problema. Vai alle parti root cause o caused by nella parte inferiore della traccia.


Detto questo (e non collegati al problema reale), il classname b5 è una scelta piuttosto scarsa. Dovrebbe essere un nome ragionevole che inizia con lettere maiuscole, ad es. User, Product, Order, ecc.

+0

Ciao! Ho lo stesso problema, ma le mie 'classi' non si trovano nella cartella' WEB-INF'. Tuttavia, non voglio cambiare la posizione della cartella delle mie classi. Conoscete un modo per precompilare i file jsp che hanno una posizione diversa per la directory dir? –

1

Ho appena avuto lo stesso problema. In aggiunta a quanto sopra assicurati di esserti ricordato di impostare la tua classe su "pubblico"

0

Ho avuto lo stesso problema e, come evidenziato sopra, ho dimenticato di aggiungere il costruttore predefinito in quanto ne avevo aggiunto uno sovrascritto.

Java di base, il compilatore aggiunge un costruttore no arg predefinito in ogni classe creata, tranne quando si aggiunge esplicitamente un costruttore.

1

invece di
<jsp:useBean id="b5" class="com.b5" />
uso
<jsp:useBean id='b5'>
<jsp:attribute name="class" trim="true">com.b5</jsp:attribute>
</jsp:useBean>

riavviare anche server Tomcat dopo le modifiche

4

Prova tipo invece di classe

La differenza come da documentazione:

class = "package.class" type = "package.class" Crea un'istanza di un bean dalla classe denominata in classe e assegna al bean il tipo di dati specificato nel tipo.Il valore di tipo può essere uguale alla classe, una superclasse di classe o un'interfaccia implementata per classe. La classe si specifica in classe non deve essere astratta e deve avere un costruttore pubblico senza argomenti. I nomi di pacchetto e classe utilizzati con classe e tipo sono sensibili al maiuscolo/minuscolo. beanName = "{package.class |}" type = "package.class" crea un'istanza di un bean da una classe, un modello serializzato, o un'espressione che restituisce una classe o un modello serializzato. Quando si utilizza beanName, il bean viene istanziato dal metodo java.beans.Beans.instantiate. Il metodo Beans.standard controlla se il pacchetto e la classe specificati rappresentano una classe o un modello serializzato. Se rappresentano un modello serializzato, Beans.instantiate legge il modulo serializzato (che ha un nome come package.class.ser) usando un programma di caricamento classi. Il valore di tipo può essere lo stesso beanName, una superclasse di beanName, o un'interfaccia implementata da beanName. I nomi di pacchetto e classe che si utilizzano con beanName e tipo sono case sensitive.
0

L'area di lavoro ha la classe necessaria in useBean, quindi durante il lavoro non genera alcun messaggio di errore. Ma quando hai distribuito l'applicazione distribuita come per il file deploy.properties. Potrebbe essere possibile che la classe che hai utilizzato in useBean non venga distribuita. Controlla il file deploy.properties.Perché funzionerà !!

Problemi correlati