JSP JasperException:useBean类属性的值无效

lrpiutwd  于 5个月前  发布在  其他
关注(0)|答案(7)|浏览(144)
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)

字符串
有谁能解释一下这个问题的原因和解决方法吗?

lf3rwulv

lf3rwulv1#

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无参数构造函数。

package com;

public class b5 {

    public b5() {
        // Default constructor is optional when there are no other constructors.
    }
}


通常这个构造函数已经存在了,但是当你添加其他带参数的构造函数时,这个构造函数会被隐藏起来,你需要自己显式地添加它。

package com;

public class b5 {

    public b5(String argument) {
        // Non-default constructor.
    }

    public b5() {
        // You need to explicitly add a default constructor.
    }
}


另一个可能的原因是在运行时类路径中找不到Bean类。如果这是您自己的Bean,请确保其class文件位于/WEB-INF/classes/com/b5.class中。还要确保完全限定名称com.b5的字面意思正确,它是区分大小写的。然后,您应该在堆栈跟踪中进一步查找问题的确切原因。痕迹。
也就是说(与实际问题无关),类名b5是一个非常糟糕的选择。它应该是一个以大写字母开头的合理名称,例如UserProductOrder等。此外,使用<jsp:useBean>而不是基于servlet的控制器是一个糟糕的实践。如果您是servlet的新手,请从out servlets wiki page开始。

j8yoct9x

j8yoct9x2#

尝试type代替class
根据文件的差异:
class=“package.class”type=“package.class”从class中命名的类示例化bean,并将type中指定的数据类型分配给bean。type的值可以与class、class的超类或class实现的接口相同。class中指定的类不能是抽象的,必须具有public,无参数构造函数。与类和类型一起使用的包和类名区分大小写。beanName="{package.class|}”type=“package.class”从类、序列化模板或计算结果为类或序列化模板的表达式示例化bean。使用beanName时,bean由java.beans.Beans.instantiate方法示例化。Bean.instantiate方法检查指定的包和类是否表示类或序列化模板。如果它们表示序列化模板,Bean.instantiate使用类加载器读取序列化的表单(其名称类似于package.class.ser)。type的值可以与beanName、beanName的超类或beanName实现的接口相同。与beanName和type一起使用的包名和类名是区分大小写的。

slmsl1lt

slmsl1lt3#

我也遇到了同样的问题。除了上面提到的,确保你记得把你的类本身设置为“public”

svmlkihl

svmlkihl4#

我有同样的问题,正如上面强调的,我忘记添加默认构造函数,因为我添加了一个重写的构造函数。
基本的java,编译器会在你创建的每个类中添加一个默认的无参数构造函数,除非你显式地添加一个构造函数。

nhn9ugyo

nhn9ugyo5#

而不是
第一个月
使用
<jsp:useBean id='b5'> <jsp:attribute name="class" trim="true">com.b5</jsp:attribute> </jsp:useBean>
在更改后也重新启动tomcat服务器

bxfogqkk

bxfogqkk6#

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

qnakjoqk

qnakjoqk7#

我也遇到了同样的问题,我从包p1导入我的类User,但我得到了这个错误:
useBean类属性[p1.User]的值无效。
服务器遇到意外情况,无法完成请求。
例外
org.apache.碧玉.JasperException:/authen2.jsp(行:[11],列:[1])useBean类属性[p1.User]的值无效。
我所做的就是将pageEncoding="ISO-8859-1"更改为pageEncoding="UTF-8",并且成功了!

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="UTF-8"%>
   <%@page import="p1.User" %>

字符串
将页面编码更改为UTF-8可能已通过确保更好地处理字符和字节序列来修复此问题。有时,字符编码问题可能会导致代码解释中出现意外错误。切换到UTF-8可能解决了底层解析问题,从而使类导入能够正常运行。
it worked !

相关问题