日期:2014-05-17  浏览次数:20866 次

一起来见证奇迹的出现……传入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();

请将 这个对象的定义 放倒
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一个新的给它并赋值。