我在做struts工程的时候,我想实现的效果是模糊查询,即以一个关键字查询所有包含这个关键字的属性,并将查询出的所有信息都打印出来,在jsp页面使用<logic:iterate>来叠代的时候为什么查询出来的其中一条结果被打印了4遍,而不是把每一条都打印出来,我的代码是这样的
这里是Action
public ActionForward selByKey(ActionMapping mapping,ActionForm form,HttpServletRequest request
,HttpServletResponse response){
zcD z=new zcD();
String key=request.getParameter("key");

ArrayList list=z.selByKey(key);
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaa"+list.size());
request.getSession().setAttribute("sel", list);
return mapping.findForward("result");
}
这里是Dao
public ArrayList selByKey(String key) {
ArrayList list=new ArrayList();
ZcForm ac=new ZcForm();
dbCon d=new dbCon();
try{

String sql="select * from llz where username like ? or password like ? or email like ? or tel like ? or address like ? ";
pstm=d.getCon().prepareStatement(sql);
pstm.setString(1,"%"+key+"%");
pstm.setString(2,"%"+key+"%");
pstm.setString(3,"%"+key+"%");
pstm.setString(4,"%"+key+"%");
pstm.setString(5,"%"+key+"%");
rs=pstm.executeQuery();
while(rs.next()){
ac.setAddress(rs.getString("address"));
ac.setEmail(rs.getString("email"));
ac.setPassword(rs.getString("password"));
ac.setSex(rs.getString("sex"));
ac.setTel(rs.getString("tel"));
ac.setUsername(rs.getString("username"));
list.add(ac);
}
}catch(Exception e){
e.printStackTrace();
}
return list;
}
这里是JSP 
 <body>
  <center>
  <table>  
        <tr> <td>username</td>      <td>password</td>      <td>sex</td></tr>
        <logic:iterate id="se" name="sel">
        <tr>
          <td><bean:write name="se" property="username"/></td>
          <td><bean:write name="se" property="password"/></td>
          <td><bean:write name="se" property="sex"/></td>
        </tr>
        </logic:iterate>
  </table>
  </center>    
  </body>
这里是打印结果
username password sex 
dfd 222222 ? 
dfd 222222 ? 
dfd 222222 ? 
dfd 222222 ? 

解决方案 »

  1.   

    sex咋是问号?看着不太对劲啊~~
      

  2.   

    while(rs.next()){ 
    ac.setAddress(rs.getString("address")); 
    ac.setEmail(rs.getString("email")); 
    ac.setPassword(rs.getString("password")); 
    ac.setSex(rs.getString("sex")); 
    ac.setTel(rs.getString("tel")); 
    ac.setUsername(rs.getString("username")); 
    list.add(ac); 
    } 又是一个经常犯的错误,你把sc赋值了4次,并加入到list里面,他们是同一个对象
    while(rs.next()){ 
    ac=new ZcForm(); // 这里每次重新new一个才行
    ac.setAddress(rs.getString("address")); 
    ac.setEmail(rs.getString("email")); 
    ac.setPassword(rs.getString("password")); 
    ac.setSex(rs.getString("sex")); 
    ac.setTel(rs.getString("tel")); 
    ac.setUsername(rs.getString("username")); 
    list.add(ac); 
      

  3.   

    就是new 了以后还是不行,为什么只能搜出来一条呢,其他的都出不来了.真是....