JasperException:useBean类属性的值无效

时间:2010-06-11 16:33:52

标签: jsp

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)

有谁可以解释这个问题的原因和解决方案?

6 个答案:

答案 0 :(得分:12)

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

所以你有一个

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

当“幕后”发生以下情况时,此异常是典型的:

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

除了要求它应该放在一个包(你正确地做了)之外,bean本身应该是一个public类并且有一个(隐式的)public no-arg构造函数。即。

package com;

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

通常这个构造函数已经存在,但是每当你添加其他带有其他参数的构造函数时,它都会被隐藏。然后,您需要自己明确添加它。

另一个可能的原因是在运行时类路径中找不到bean类。如果这是您自己的bean,请确保其class文件位于/WEB-INF/classes/com/b5.class。还要确保完全限定名称com.b5在字面上是正确的,它区分大小写。

你应该在stacktrace中看一下问题的确切原因。前往跟踪底部的root causecaused by部分。


那说(并且与实际问题无关),类名b5是一个非常差的选择。它应该是一个以大写字母开头的合理名称,例如UserProductOrder

答案 1 :(得分:5)

尝试键入而不是

根据文档的差异:

class =“package.class”type =“package.class” 从类中指定的类实例化bean,并为bean指定您在type中指定的数据类型。 type的值可以与class,类的超类或类实现的接口相同。 您在类中指定的类不能是抽象的,并且必须具有public,no-argument构造函数。与类和类一起使用的包和类名称区分大小写。 beanName =“{package.class |}”type =“package.class” 从类,序列化模板或计算结果为类或序列化模板的表达式实例化bean。使用beanName时,bean由java.beans.Beans.instantiate方法实例化。 Beans.instantiate方法检查您指定的包和类是表示类还是序列化模板。如果它们代表一个序列化模板,Beans.instantiate使用类加载器读取序列化形式(其名称类似于package.class.ser)。 type的值可以与beanName,beanName的超类或beanName实现的接口相同。与beanName和type一起使用的包和类名称区分大小写。

答案 2 :(得分:1)

我遇到了同样的问题。除了以上内容,请确保您记得将您的课程本身设置为“公开”

答案 3 :(得分:1)

而不是
<jsp:useBean id="b5" class="com.b5" />
使用
<jsp:useBean id='b5'>
<jsp:attribute name="class" trim="true">com.b5</jsp:attribute>
</jsp:useBean>

更改后还重启tomcat服务器

答案 4 :(得分:0)

我有同样的问题,如上所述,我忘了添加默认构造函数,因为我添加了一个重写的。

基本java,编译器在您创建的每个类中添加一个默认的无arg构造函数,除非您显式添加构造函数。

答案 5 :(得分:0)

您的工作区具有useBean中所需的类,因此在工作时它不会抛出任何错误消息。但是,当您部署根据deploy.properties文件部署的应用程序时。您在useBean中使用的类可能未部署。 检查你的deploy.properties文件。希望它可以工作!!