The value for the useBean class attribute XXX is invalid 问题详解

来源:互联网 发布:帝国时代地图编辑软件 编辑:程序博客网 时间:2024/06/05 23:00
 

The value for the useBean class attribute XXX is invalid 问题详解

1.在编译 JSP 时,指定的 Bean 类没找到
2. Bean 虽然找到了,但是该类不是 public 的,或者找到的 class 文件是 interface 或抽象类
3. Bean 类中没有 public 的无参数构建函数
第二点很明显,不用多解释,最经常遇到的情况是 Bean 类忘了声明为 public 。
第三点中需要注意的是,如果你的 Bean 类没有提供任何构造函数,将自动生成一个默认构建函数,这没有问题。如果你有构造函数,则不会自动生成该默认构造函数。另外经常忽略的问题是写了默认构造函数却不是 public 的。
第 一点看起来简单,不过却最麻烦,尤其是在开发环境里。这里需要注意的是,“在编译 JSP 时”,这意味着引用 Bean 的 JSP 是新的,或者刚刚更新过, Tomcat 将自动(重新)编译该 JSP,此时如果发现 Bean 没找到,就会报这个错。但情况因为 JSP 或者 Bean 正在开发而变得复杂,这里不会一一列举所有情况,只举一些典型例子,具体情况需具体分析。如果 JSP 没变, Tomcat 不会重新编译 JSP,同时默认情况也不会自动重新加载更新过的 Bean 类(参考 http://jakarta.apache.org/tomcat/tomcat-5.5-doc/config/context.html 中的 reloadable),所以,你会发现即时删除了 Bean 类都没有问题,当然,更新 Bean 类也不会有什么用。如果在 JSP 编译产生之后,我们重起了服务器,由于 JSP 文件编译的结果存在(TOMCAT_HOME/work 中),所以,可以访问 JSP 页面。可是如果访问前,删掉了 Bean 类,就会报过 ClassNotFoundException 而不是上述错误。不同点在于 JSP 是否经过编译,没有编译则没有找到类报告题目中的编译错误,编译过则是 ClassNotFoundException。
解决第三个问题的最简单办法就是停止服务器,确认你的 JSP 和 Bean 正确部署(也可以启动后部署),清理掉 TOMCAT_HOME/work 中的内容,重起服务器。

 

 

==========================================================================
  说实话,的确很详细,但是实际问题比不是这个样子;
什么找不到 class了,目录只类的问题发生的几率是非常小的
因为jsp最基础的的开发环境是Tomcat+myeclipse
上述问题在myeclipse里面基本不会发生 就算发生只要删除服务起里面的目录再
导入,操作十分简便
 我要说的是另外的问题,
这个问题还要从N天说起,我们刚开始学jsp老师让写一个简单的购物网站,
一切都很顺利,可是今天在做注册页面的时候发生了上述问题,
 
<code>------------------
<%@ page import="file.User_info"%>
1.<jsp:useBean id="Con_Db" scope="page" class="file.Con_Db"></jsp:useBean>
2.<jsp:useBean id="user_info" scope="page" class="User_info">
3.<jsp:setProperty name="user_info" property="*"/>
</jsp:useBean>
提示2.里面的User_info有问题
在所有的途径都测试后,真的让人崩溃呀.么有办法,就去baidu了
一看-------晕倒,千篇一律--------------怀疑------------
Tomcat的目录我都看了好多遍了,决度没有问题,就当世界仿佛都离我而去的时候我发现了一个问题---------------
<jsp:useBean id="user_info" scope="page" class="User_info">
class=后面我是第一次这样写,因为,在我写file.回车后myeclipse自己生成了上述语句,以前我总是觉得都page指令中加太多的import很影响美观,所以总是把路径写在上面,而这次,小小的情绪改变了很多,
将上述代码改为
<code>----------------------------
<jsp:useBean id="user_info" scope="page" class="file.User_info">
<code>--------------------
写上路径------------
测试通过,
我想这只是一种技巧,在理论上不可能出错的地方出了错,不排除是myeclipse在本次处理的过程中发生了一点小小的问题,因为在这种地方出现问题简直是天方夜谈
 
=============================
 
再此我感叹一下:
    细节真的可以影响大局,特别是在编程方面,一点小小的问题都可能造成巨大的影响,大到你都不会怀疑到出错的是那个本以为百分百正确的地方,