论坛首页 Java企业应用论坛

一个很奇怪问题,折腾一天了

浏览 3143 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-10  

今天改装一个无级树型菜单,用spring来管理事务,ssh架构的,其中struts的Action代码如下:首先做了一个BaseAction用来读取spring配置文件的bean定义

java 代码
  1. public class BaseAction extends Action {   
  2.          protected final Log log = LogFactory.getLog(getClass());   
  3.          private static final Long defaultLong = null;   
  4.          public ApplicationContext applicationContext;    
  5.   
  6.         public Object getBean(String name) {   
  7.             ApplicationContext ctx =    
  8.               WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());   
  9.          return ctx.getBean(name);  

然后是处理控制的MenuManageAction extends BaseAction,选取其中的一段代码来看;

java 代码
  1.   }else if (todoaction==null || "".equals(todoaction) || "list".equals(todoaction)){   
  2. reeManager  treeManager=(TreeManager)getBean("treeManager");   
  3. list=treeManager.getRoots(SystemMenu.class);   
  4. equest.setAttribute("objectlist",list);   
  5.            return mapping.findForward("list");      

问题就出在这,TreeManager  treeManager=(TreeManager)getBean("treeManager");居然 出现了ClassCastException!!!!!!!!!!!!!!!!!!!   getBean方法虽然返回的是Object类型的但其实是个TreeManager类型的(见下面的配置文件),但就是一转型为TreeManager就得到ClassCastException,如果不转型得到的是Object类型的,但是就不能调用getRoot方法了,为了得到大家的帮助,我把其它相关代码也贴出来,spring配置文件如下:

xml 代码
  1. <bean id="treeManager" class="org.news.service.TreeManager">  
  2.         <property name="sessionFactory">  
  3.             <ref bean="sessionFactory" />  
  4.         </property>  
  5.     </bean>  

TreeManager.java如下:

java 代码
  1. public class TreeManager extends HibernateDaoSupport{   
  2.        
  3.     public  List getRoots(Class cls){    
  4.       
  5.     return this.getHibernateTemplate().find(" from "+ cls.getName()+ " where enabled=true and parent_id is null order by id");   
这个问题我跟好几个人讨论都没有解决,本来就是个转型错误,却搞的这么郁闷,希望这个帖子不要被封掉,如果要封最好能解决了再封,这样我也好受点!
   发表时间:2007-10-11  
换个JRE版本试试.
0 请登录后投票
   发表时间:2007-10-11  
同意楼上的
先看看自己的jde/jre版本是否一致且1.5以上
然后,如果你用的是eclipse
检查转型前后两个类是否真的是同一个类
我就搞过一次前后两个名字一样,但是实际包不一样的情况
可以在前面import检查一下,或者把类名带包名写全

0 请登录后投票
   发表时间:2007-10-11  
我用的是1.5版本的,换个版本还是不行啊!真叫人抓狂!
0 请登录后投票
   发表时间:2007-10-11  
楼上lixiao说的的情况我也检查过了,我是把代码抽取出来了,只有定义两个bean,不可能出现名字相同而不是一个类的情况,而且我也测试过了,拿到的确实是TreeManager类型的,但它就不准我转型!
0 请登录后投票
   发表时间:2007-10-11  
检查classloader是否是同一个~~~

检查应用服务器中是否存在2个spring,包括其他虚拟主机

检查spring是否跟你的应用在同一个host里。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics