我从数据库读所有记录显示在页面上,结果显示的记录条数正确,可所有记录都是最后一条记录,晕了请帮忙看看吧public class StudentVO {
private String name;
private String sex;
private int age;getter/setter省略}public class ItAction implements Action {
StudentVO student ;
private List list;
public String execute() throws Exception {
student = new StudentVO();
list = new ArrayList();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:user");
Statement stmt = con.createStatement();
String s1 = "select * from student";
ResultSet rset = stmt.executeQuery(s1);
while (rset.next()) {
String name = rset.getString("xm");
String sex = rset.getString("sex");
int age = rset.getInt("age");
student.setName(name);
student.setSex(sex);
student.setAge(age);
System.out.println(student.getName()+student.getSex()+student.getAge());//此处输出正确的结果
list.add(student);
}
} catch (Exception e) {
System.out.println(" eror   " + e.getMessage()); } finally { }
return "success";
}
getter/setter省略}jsp:
<%@ taglib prefix="s" uri="/struts-tags"%>
<table>
        <s:iterator value="list" >
<tr>
<td><s:property value="name"/></td>
<td><s:property value="sex"/></td>
<td><s:property value="age"/></td>
</tr>
     </s:iterator>      
</table>===================================================
我数据库中共5条记录,输出结果是:
张三 男 21 
张三 男 21 
张三 男 21 
张三 男 21 
张三 男 21 
张三 男 21 这是我数据库中的最后一条记录呀

解决方案 »

  1.   

    <td><s:property value="name"/></td>
    <td><s:property value="sex"/></td>
    <td><s:property value="age"/></td>
    变成
    <td><s:property value="student.name"/></td>
    <td><s:property value="student.sex"/></td>
    <td><s:property value="student.age"/></td>
    试试
      

  2.   

    StudentVO student ;放在你的execute()方法里面定义  不要定义成全局的
      

  3.   


    public class ItAction implements Action {
    StudentVO student ;
    private List list;
    public String execute() throws Exception {
    student = new StudentVO();
    list = new ArrayList();
    try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con = DriverManager.getConnection("jdbc:odbc:user");
    Statement stmt = con.createStatement();
    String s1 = "select * from student";
    ResultSet rset = stmt.executeQuery(s1);
    while (rset.next()) {

    StudentVO student = new StudentVo();

    String name = rset.getString("xm");
    String sex = rset.getString("sex");
    int age = rset.getInt("age");
    student.setName(name);
    student.setSex(sex);
    student.setAge(age);
    System.out.println(student.getName()+student.getSex()+student.getAge());//此处输出正确的结果
    list.add(student);
    把红色部分 去掉  换成蓝色的。这是因为 你的student  是在循环上面声明的,在你的循环里面set 值的时候,会把以前的值覆盖掉,所以的的list 里面 add 的值 都 是 一样的,当循环完最后一条的时候,你的list 里面的 所有student 也是都成了最后一条的值。
      

  4.   

    while (rset.next()) {
    String name = rset.getString("xm");
    String sex = rset.getString("sex");
    int age = rset.getInt("age");
    student.setName(name);
    student.setSex(sex);
    student.setAge(age);

    System.out.println(student.getName()+student.getSex()+student.getAge());//此处输出正确的结果
    list.add(student);
    }
    每次循环红色部分都会set进新的值到student里面,等student里面有了新的值list才add(student)所以每次add的应当都是不同的student吧。所<s:iterator value="list" >
    换成<s:iterator value="#list" >把<td><s:property value="XXX"/></td>都成<td><s:property value="#XXX"/></td>试试呢
      

  5.   

    while (rset.next()) {
     Student student=new Student();
    String name = rset.getString("xm");
    String sex = rset.getString("sex");
    int age = rset.getInt("age");
    student.setName(name);
    student.setSex(sex);
    student.setAge(age);
    System.out.println(student.getName()+student.getSex()+student.getAge());//此处输出正确的结果
    list.add(student);
      

  6.   

    先debug 一下看看那个list的里面的数据是什么
      

  7.   

    上面说的很明白了 你每次都要NEW一个STUDENT对象不解释了 上面很清楚一看就是个初学者 呵呵 加油!!