Map遍历对象后始终只重复显示最后一条数据,怎么解决呢?

梦幻之城 发布于 2012/07/02 12:20
阅读 2K+
收藏 0
这是servlet得到excel里的值及传值代码, 其中a为excel读到数据的长度,Map<String, Student> map = new HashMap<String, Student>();
                    Student stu=new Student();
                    String key="student";
                    for(int j=1;j<a;j++){
                        stu.setSname(eh.getValueAt(sheet, j, 0));
                        stu.setSphone(eh.getValueAt(sheet, j, 1));
                        stu.setSemail(eh.getValueAt(sheet, j, 2));
                        //System.out.println(eh.getValueAt(sheet, j, 0));
                        map.get(key+j);
                        map.put(key+j, stu);
                        //System.out.println(map.get("student"+j).getSname()+"ddd");
                    }
                   
                    request.getSession().setAttribute("map", map);
                    response.sendRedirect("teacher/selectinportstudents.jsp?ptype="+ptype);                   下面是页面接受值的代码:<%
           Map<String, Student> map =(Map<String, Student>)session.getAttribute("map");
           Student stu=new Student();

            for (Map.Entry<String, Student> entry : map.entrySet()) {
                       stu=new Student();
                    stu=entry.getValue();
                   
                    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
                      String sname=stu.getSname();
                      String sphone=stu.getSphone();
                      String semail=stu.getSemail(); 
             } %>问题在于,System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());打印的始终为一条数据,重复显示map.size()遍,怎么解决呢?
加载中
0
情天大圣
情天大圣
Map<String, Student> map = new HashMap<String, Student>(); 
                    Student stu=new Student(); 
                    String key="student"; 
                    for(int j=1;j<a;j++){ 
                        stu.setSname(eh.getValueAt(sheet, j, 0)); 
                        stu.setSphone(eh.getValueAt(sheet, j, 1)); 
                        stu.setSemail(eh.getValueAt(sheet, j, 2)); 
                        //System.out.println(eh.getValueAt(sheet, j, 0)); 
                        map.get(key+j); 
                        map.put(key+j, stu); 
                        //System.out.println(map.get("student"+j).getSname()+"ddd"); 
                    } 
                    
                    request.getSession().setAttribute("map", map); 
                    response.sendRedirect("teacher/selectinportstudents.jsp?ptype="+ptype);

修改为:

Map<String, Student> map = new HashMap<String, Student>(); 
                    String key="student"; 
                    for(int j=1;j<a;j++){ 
                        Student stu=new Student(); 
                        stu.setSname(eh.getValueAt(sheet, j, 0)); 
                        stu.setSphone(eh.getValueAt(sheet, j, 1)); 
                        stu.setSemail(eh.getValueAt(sheet, j, 2)); 
                        //System.out.println(eh.getValueAt(sheet, j, 0)); 
                        map.get(key+j); 
                        map.put(key+j, stu); 
                        //System.out.println(map.get("student"+j).getSname()+"ddd"); 
                    } 
                    
                    request.getSession().setAttribute("map", map); 
                    response.sendRedirect("teacher/selectinportstudents.jsp?ptype="+ptype);

梦幻之城
梦幻之城
是在jsp页面
梦幻之城
梦幻之城
我想要编辑student里的属性,怎么得到对象?我在后面for循坏后面request.getSession().setAttribute("stu",stu);在编辑页面得到stu后stu.getSname()还都是一样,这样写不行耶,要怎样写呢?
梦幻之城
梦幻之城
呵呵,不言谢了
0
情天大圣
情天大圣
妹纸,你能把代码按格式贴下么,没排版,看都难受!
0
Andre.Z
Andre.Z
map.put(key+j, stu); 

循环内的stu始终是那一个,所以,当然。

Student stu=new Student(); 

需要把上面的这句放去循环里面。

明白了??

Andre.Z
Andre.Z
回复 @梦幻之城 : 你显示的jsp里面new那么多Student对象有什么用?一点用都没的。
Andre.Z
Andre.Z
回复 @梦幻之城 : 是在上面的那个循环,java类里面的,不是在jsp里面的,不要搞错了。
梦幻之城
梦幻之城
这样放进去还是重复显示
0
晕dows
晕dows

Student stu=new Student();

放到for循环里面去

0
xxcxy
xxcxy

Student stu=new Student();

这个放到循环里面试试

0
情天大圣
情天大圣

我把a设置为4,打印出来三条记录,key是没有问题的,但对象的获取方法似乎有问题,都是一样的:

Key = student2, Value = cn.com.streaming.miotp.cas.Student@c17164
Key = student1, Value = cn.com.streaming.miotp.cas.Student@c17164
Key = student3, Value = cn.com.streaming.miotp.cas.Student@c17164

如风随影
如风随影
兄弟,别人没吓说,是你不懂套路! 妹陀的代码是创建的一堆重复相同的对象!!
梦幻之城
梦幻之城
回复 @星星点天灯 : 呵呵,对象真多!
情天大圣
情天大圣
回复 @Andre.Z : 嘿嘿,跟她一样,把对象搞一样的了!
Andre.Z
Andre.Z
回复 @星星点天灯 : 拜托,你回复给我做什么,我前面都已经告诉她怎么做了,搞清楚对象啊兄弟。
情天大圣
情天大圣
回复 @Andre.Z : 将前面代码里的Student stu=new Student(); 放进for循环体内即可!
下一页
0
牛牛牛牛
牛牛牛牛

引用来自“晕dows”的答案

Student stu=new Student();

放到for循环里面去

+1
0
如风随影
如风随影

妹陀你好

map = new HashMap<String, Student>();
                    Student stu=new Student(); //这里你只实例化了一个对象
                    String key="student";
                    for(int j=1;j<a;j++){ 

                        //你给一个引用对象不停的复制属性
                        stu.setSname(eh.getValueAt(sheet, j, 0));
                        stu.setSphone(eh.getValueAt(sheet, j, 1));
                        stu.setSemail(eh.getValueAt(sheet, j, 2));
                        //System.out.println(eh.getValueAt(sheet, j, 0));
                        map.get(key+j); 

                        //这里除了 键不同,stu永远是一个,属性是最后一个都是相同的
                        map.put(key+j, stu); //
                        //System.out.println(map.get("student"+j).getSname()+"ddd");
                    }
                    request.getSession().setAttribute("map", map);
                    response.sendRedirect("teacher/selectinportstudents.jsp?ptype="+ptype);    

所以你显示在页面上的永远是相同的

梦幻之城
梦幻之城
回复 @fens111 : http://www.oschina.net/question/250088_59686
如风随影
如风随影
回复 @梦幻之城 : 我没懂你意思? 1,你要修改student类后,保存在哪,然后怎么读取?
梦幻之城
梦幻之城
顺便再问下,我想要编辑student里的属性,既修改,怎么得到对象?我在后面for循坏request.getSession().setAttribute("stu",stu);在编辑页面得到stu后stu.getSname()还都是一样,这个是?
梦幻之城
梦幻之城
解释的很清楚,明白了,谢谢!嘻嘻
0
情天大圣
情天大圣

页面代码:

Map<String, Student> map =(Map<String, Student>)session.getAttribute("map"); 
           Student stu=new Student(); 

            for (Map.Entry<String, Student> entry : map.entrySet()) { 
                       stu=new Student(); 
                    stu=entry.getValue(); 
                    
                    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); 
                      String sname=stu.getSname(); 
                      String sphone=stu.getSphone(); 
                      String semail=stu.getSemail();  
             }

修改为:

Map<String, Student> map =(Map<String, Student>)session.getAttribute("map"); 

            for (Map.Entry<String, Student> entry : map.entrySet()) {
                    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); 
                    String sname = entry.getValue().getSname();
		    String sphone = entry.getValue().getSphone();
		    String semail = entry.getValue().getSemail();
             }

梦幻之城
梦幻之城
我没说明白,当我点击修改的时候这个student学生的信息是<input type="text" name="textfield" value="<%=stu.getSname() %>">,得到这个对象的属性并修改,所以这个对象怎么传到编辑页面呢?
返回顶部
顶部