一起来见证奇迹的出现……传入arraylist中的不同元素最后都变相同了
这个是用servlet往APPLET里传值,servlet中的值来自数据库。传的是arraylist,arraylist中的元素是javabean(我的文件中实例的名字叫jb) dbconn是一个类,用于处理连接数据库的代码。
具体代码:
servlet:
Collection<javabean> al=new ArrayList<javabean>();
		dbconn dbc=new dbconn();
		// TODO Auto-generated method stub
		String sql="select * from entity_1";
		PreparedStatement ps=null;
try{
				ps=dbc.getconn().prepareStatement(sql);
				javabean jb=new javabean();
			ResultSet rs=ps.executeQuery();
		       while(rs.next()){				
				jb.setId(rs.getInt("id"));
				jb.setTitle(rs.getString("title"));
				jb.setContent(rs.getString("content"));
				al.add(jb);
		       }		
		response.setContentType("application/octet-stream");
		OutputStream sop=response.getOutputStream();
		ObjectOutputStream  op=new ObjectOutputStream(sop);
		op.writeObject(al);
applet:
  class inite implements ActionListener{
	    	@SuppressWarnings("unchecked")
			public void actionPerformed(ActionEvent e){
	    		String content;
       URL u=getCodeBase();
       try {
		URL url=new URL(u,"http://localhost:8888/t/F");
	    URLConnection con = url.openConnection();
		con.setDoOutput(true);
		con.setUseCaches(false);
		con.connect();
		InputStream in=con.getInputStream();
	    ObjectInputStream o=new ObjectInputStream(in);
	    Collection<javabean> al=(Collection<javabean>) o.readObject();
我用迭代试了,此时的al里的javabean都一样……
------解决方案--------------------
javabean jb=new javabean();
请将 这个对象的定义 放倒
while(rs.next()){
中,具体原因 不解释。
否则,一直是同一个对象在list中
------解决方案--------------------
------解决方案--------------------javabean jb=new javabean();
ResultSet rs=ps.executeQuery();
while(rs.next()){
jb.setId(rs.getInt("id"));
jb.setTitle(rs.getString("title"));
jb.setContent(rs.getString("content"));
al.add(jb);
}
你每次设置的都是同一个对象。对象是传址的,所以最后将变成所有的对象都是最后一个循环的对吧。所以要每次在循环里都NEW一个新的给它并赋值。