在使用JavaBean时遇到的问题:The value for the useBean class attribute is invalid

本文探讨了在JSP中使用jsp:useBean元素时遇到的构造函数问题,详细解释了原因并提供了解决方案,包括修改代码、类加载器问题及不同JDK版本的兼容性考虑。

The value for the useBean class attribute is invalid ,

The value for the useBean class attribute java.lang.Integer is invalid.

The value for the useBean class attribute java.util.List is invalid

是因为在JSP中使用了代码:

<jsp:useBean id="ShowCharge" class="java.lang.Boolean" scope="request"/>

可能是JDK版本问题导致编译的时候找不到Boolean类。

怎么办呢?

在JSP页面:<jsp:useBean id="ShowCharge" class="java.lang.Boolean" scope="request"/>

会显示错误信息:The constructor Boolean() is undefined即没有对应的构造函数

实际上代码<jsp:useBean id="ShowCharge" class="java.lang.Boolean" scope="request"/>

等价于:

Boolean ShowCharge = (Boolean)request.getAttribute("ShowCharge");
    if(ShowCharge == null){
        Boolean ShowCharge = new Boolean();
        request.setAttribute("ShowCharge",ShowCharge);
    }

那么JDK1.6中是没有Boolean()构造函数的,所以会报错。。。。;

可见错误可能的原因包括:

1. 在编译 JSP 时(不是运行时),指定的 Bean 类没找到
2. Bean 虽然找到了,但是它不是 public 的,或者找到的 class 文件是 interface 或抽象类
3. Bean 类中没有 public 的默认构建函数

对于

The value for the useBean class attribute is invalid ,

解决方法,用等价代码去替换如
将:<jsp:useBean id="ShowCharge" class="java.lang.Boolean" scope="request"/>

替换成:

Boolean ShowCharge = (Boolean)request.getAttribute("ShowCharge");
    if(ShowCharge == null){
        Boolean ShowCharge = new Boolean(false );//注意这里换成带参数的构造方法
        request.setAttribute("ShowCharge",ShowCharge);
    }

对于

The value for the useBean class attribute java.lang.Integer is invalid.

解决方法,用等价代码去替换如

将:<jsp:useBean id="MaxDocDispIdx " class="java.lang.Integer" scope="request"/>

替换成:

Integer MaxDocDispIdx = (Integer)request.getAttribute("MaxDocDispIdx");
    if(MaxDocDispIdx == null){
        MaxDocDispIdx = new Integer(0);
        request.setAttribute("MaxDocDispIdx",MaxDocDispIdx);
    }

对于

The value for the useBean class attribute java.util.List is invalid

解决方法是将:

<jsp:useBean id="DocBeanList" class="java.util.List" scope="session" />

换成

<jsp:useBean id="DocBeanList" class="java.util.ArrayList" scope="session" />

 

经过测试发现另一种方法可以实现:

如:<jsp:useBean id="ShowCharge" class="java.lang.Boolean" scope="request"/>

改成<jsp:useBean id="ShowCharge" type="java.lang.Boolean" scope="request"/>

即将class 改成type.对以上Integer,List类型都可以。

 

还有对于class里的是一个object也可能是上诉情况。

 

### JSP `useBean` 动作中的 `class` 属性解释及有效值 在 JSP 中,`<jsp:useBean>` 动作用于创建或检索一个 JavaBean 实例。`class` 属性是 `<jsp:useBean>` 动作的一个重要组成部分,它指定了要实例化的 JavaBean 的全限定类名(即包含包名的类名)。以下是关于 `class` 属性的详细说明: - **定义与作用**:`class` 属性用于指定 JavaBean 的类名。该类必须是一个有效的 Java 类,并且需要满足 JavaBeans 的规范要求,例如提供无参构造函数、遵循 getter 和 setter 方法命名规则等[^1]。 - **有效值**:`class` 属性的有效值必须是一个完整的类名(包括包名)。例如,如果 JavaBean 定义在 `com.example.beans` 包中,类名为 `MyBean`,那么 `class` 属性的值应为 `com.example.beans.MyBean`[^2]。 - **示例代码**: ```jsp <jsp:useBean id="myBean" class="com.example.beans.MyBean" scope="session" /> ``` 在上述代码中: - `id` 是分配给 Bean 的名称,用于后续引用。 - `class` 指定了要实例化的 JavaBean 的类名。 - `scope` 定义了 Bean 的作用域,可以是 `page`、`request`、`session` 或 `application`。 - **注意事项**: - 如果指定的类不存在或无法加载,则会抛出 `InstantiationException` 或 `ClassNotFoundException` 异常。 - JavaBean 必须符合特定的规范,例如提供公共无参构造函数,否则会导致实例化失败。 ### 示例:使用 `jsp:useBean` 创建和访问 JavaBean 以下是一个简单的示例,展示如何在 JSP使用 `jsp:useBean` 动作实例化一个 JavaBean 并访问其属性。 #### JavaBean 定义 ```java package com.example.beans; public class MyBean { private String message; public MyBean() { this.message = "Hello, World!"; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } ``` #### JSP 文件 ```jsp <jsp:useBean id="myBean" class="com.example.beans.MyBean" scope="session" /> <jsp:setProperty name="myBean" property="message" value="Welcome to JSP!" /> <p>Message from Bean: <jsp:getProperty name="myBean" property="message" /></p> ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值