我在做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 ?
这里是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 ?
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);
}