这段代码编译报错,但是可以运行,List<UserInfo>还获得到值(是有值的)
<%
IUserDao biz=new UserMesBiz();
String uname=(String)session.getAttribute("login");         //biz.findAllZ(uname);这个方法返回值为一个Map<String,UserInfo>
List<UserInfo> map=biz.findAllZ(uname);          

request.setAttribute("UserInfos",map);
 %>
如果我把它换成这样,编译不报错,但就发生异常:
<%
IUserDao biz=new UserMesBiz();
String uname=(String)session.getAttribute("login");         //biz.findAllZ(uname);这个方法返回值为一个Map<String,UserInfo>
Map<String,UserInfo> map=biz.findAllZ(uname);          

request.setAttribute("UserInfos",map);
 %>错误信息:严重: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 10 in the jsp file: /Message/ListMessage.jsp
Type mismatch: cannot convert from List<UserInfo> to Map<String,UserInfo>
7: <%
8:  IUserDao biz=new UserMesBiz();
9:  String uname=(String)session.getAttribute("login");
10:  Map<String,UserInfo> map=biz.findAllZ(uname);
11:  out.print(map);
12:  request.setAttribute("UserInfos",map);
13:  %>
奇怪!奇怪!

解决方案 »

  1.   

    编译报错是不可能运行的,运行的是你以前的版本而已,都没编译成类文件怎么能运行最新的改动?
    下面的是Map<String,UserInfo> map=biz.findAllZ(uname);这句话错了,看看你biz.findAllZ(uname)这个方法返回的map是否能转换成Map<String,UserInfo>,也就是说map里面是不是String,UserInfo这种结构。还有biz.findAllZ(uname)这个方法有没有抛出异常,jsp页面尽量不要调用类文件,在action里面或者servlet里面写好,页面都用标签。
      

  2.   

      //biz.findAllZ(uname);这个方法返回值为一个Map<String,UserInfo>
    List<UserInfo> map=biz.findAllZ(uname);你自己说的biz.findAllZ(uname)返回一个对象,而你确用List接受,编译能通过?
      

  3.   

    这段代码编译报错,但是可以运行,List<UserInfo>还获得到值(是有值的)这个问题我重新启动Tomcat6又没有了!
    但是又说我的连接池异常
    Context ctx=new InitialContext();
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/orcl");
    conn=ds.getConnection();我其它注册,登录都已经做好了~测试好了都是用这个连接的!无有问题!所以奇怪,会不会是个Tomcat6有问题!