小弟在做一个struts和ibatis小例子的时候,碰到类转型的问题,代码如下:
public ActionForward viewAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{
        logger.debug("viewAll User!!!");
        List userlist = us.getAllUser();
        request.setAttribute("allUser", userlist);for(Iterator it = userlist.iterator();it.hasNext();){
    User user = (User)it.next();
}
}
当执行到User user = (User)it.next();时,总提示类型转换错误。User类是一个实体类,通过这个方法,打算返回数据库中所有的用户。
望大家帮帮我!

解决方案 »

  1.   

    对了,我的映射文件是这样写的:
    <select id="getAll" resultClass="java.util.List">
            select usernum, username, userbrno from cr_user
    </select>
    自己再顶一下!
      

  2.   

    没用过iBatis,resultClass="java.util.List" 返回的list会自动包装User吗?
      

  3.   

    不敢肯定ibatis自动包装User,不过按自己的理解应该是自动包装的,找不到具体的例子啊,郁闷中。
      

  4.   

    那我认为这个返回的是一个包含记录数list的listList user = (ArrayList)it.next();
    list.get(数据表对应的字段)
      

  5.   

    我认为是你的 us.getAllUser();这个方法有点问题,返回的数据可能不是由User类型组成的List
    ,我在Hibernate里面也遇到过类似的问题,
    select usernum, username, userbrno from cr_user
    你的usernum, username, userbrno 是User类的所有数据成员吗?
      

  6.   

    有兴趣的话,可以用下面的方法看看 list 里面放的到底是什么东西,然后再决定怎么用它:   Object o = it.next();
       System.out.println(o.getClass().getName());
      

  7.   

    我按照 maquan('ma:kju) 作了,显示的是java.util.ArrayList。奇怪,那怎么解决呢?请大家帮帮我!
      

  8.   

    还有,我的User是这样的:
    public class User implements Serializable{    private String usernum;
        private String username;
        private String userbrno;    public User(String usernum, String usrname, String userbrno){
           this.usernum = usernum;
           this.username = username;
           this.userbrno = userbrno;
        }        public void setUsernum(String usernum){
            this.usernum = usernum;
        }
        public String getUsernum(){
            return usernum;
        }    public void setUsername(String username){
            this.username = username;
        }
        public String getUsername(){
            return username;
        }    public void setUserbrno(String userbrno){
            this.userbrno = userbrno;
        }
        public String getUserbrno(){
            return userbrno;
        }}
      

  9.   

    回复人:kevinliuu(@。@) ( 五级(中级)) 信誉:107  2006-06-27 12:13:00  得分:0那我认为这个返回的是一个包含记录数list的listList user = (ArrayList)it.next();
    list.get(数据表对应的字段)
    不是都告诉过你怎么做了吗
      

  10.   

    很可能你的数据回来已经不是User对象了,试试下面这种方法能不能取出数据
    for(Iterator it = userlist.iterator();it.hasNext();){
        Object[] row    = (Object[])it.next();
        String usernum  = (String)row[0];
        String username = (String)row[1];
        String userbrno = (String)row[2];    System.out.println(usernum + username + userbrno);
    }
      

  11.   

    kevinliuu(@。@) 你说的我不明白,你的list.get(数据表对应的字段)中的list是什么啊?小弟有点愚,请明示!
    而且我做另一个例子
    accountlist = sqlMap.queryForList("getAll", null);
    for(Iterator it = accountlist.iterator();it.hasNext();){
       Account a2 = (Account)it.next();
       System.out.println("---"+a2.getUsername());
       System.out.println("--name-"+a2.getPassword());
    }
    是可以的,其中
    <select id="getAll" resultClass="example.Account">
          select * from Account
    </select>
    不知道这你又如何解释?
      

  12.   

    l1i2n3y4u5n6() 你说的,我试了,不对啊。Object[] row    = (Object[])it.next();提示转换错误!
      

  13.   

    没看出什么问题拉。不过你这样写可能能实现你要的结果。
    for(Iterator it = userlist.iterator();it.hasNext();){
        Map map = new HashMap();
        map = (Map)it.next();
    }然好再把map转换成你要的那个东东
      

  14.   

    <select id="getAll" resultClass="java.util.List">
            select usernum, username, userbrno from cr_user
    </select>
    楼主这样写,还不出现错误,我真是有点惊讶了
    <select id="getAll" parameterClass="java.lang.String" resultClass="package.User">
            select usernum, username, userbrno from cr_user
    </select>
      

  15.   

    <select id="getAll" resultClass="java.util.List">
            select usernum, username, userbrno from cr_user
    </select>
    同你自己写的办法改啊!上面写的方法在hibernate中是能用的,但是ibatis我没有试过,sorry^_^!
      

  16.   

    jspine(大哈) 你说的太绝对了吧,我确实这么做并且没有出错,而且我的查询所有的数据,不用参数,为什么非得要写parameterClass="java.lang.String"。l1i2n3y4u5n6() 我是按着我的方法改了,但就是不对,很郁闷中。
      

  17.   

    us.getAllUser();这个方法贴出来看看
      

  18.   

    resultClass="java.util.List"应该是User
      

  19.   

    resultClass="java.util.List"
    这个地方的写法错误
    resultClass是结果返回的类型
    你写的是list
    list怎么可能转为user
      

  20.   

    同时如果你的user字段名如果不能和数据库的一一对应
    需要在配置文件中写resultmaping
      

  21.   

    好像是这样吧
    好久没用了
    反正写resultmaping最保险了
      

  22.   

    http://ibatis.apache.org/javadownloads.html这里有个JPetStore 5.0 Example Application的ibatis的实现,ibatis的所有东东都应该包括在内了吧
      

  23.   

    o.getClass.getName()返回的是一个java.util.list 说明你的集合里包含了集合 所以在遍历集合时每个结果又是一个集合 所以你在类型转换的时候要报错的
      

  24.   

    将你的IBATIS配置文件修改一下:
    <select id="getAll" resultClass="java.util.List">
            select usernum, username, userbrno from cr_user
    </select>------>
    <typeAlias alias="user" type="yourpackage.User"/>
    <resultMap id="userResult" class="user">
    <result column="USER_NUM" property="usernum" />
    ....
    ....
    ....
    ....("...."处按照你的JAVABEAN和数据库字段匹配写好)
    </resultMap>
    <select id="getAll" resultMap="userResult">
            select usernum, username, userbrno from cr_user
    </select>
    这样应该就可以了。