struts2框架下,jsp页面显示出一个list 我现在想对这个表单进行删除一条信息该如何写?

时间:2021-03-28 19:39:01
这个是我jsp显示一个学生信息的表单
<s:iterator id="student" value="#attr.list" > 
 <tr>

        <td><s:property value="stuNo"/></td>
    <td><s:property value="name"/></td>
<td><s:property value="age"/></td>
<td><s:property value="sex"/></td>
<td><s:property value="stuClass"/></td>
<td><input type="checkbox" value="stuNo" > </td>
 </tr>
   </s:iterator>
    </table>  
<input type="button" value="删除" onClick="location.href='tt/delete_stu_by_id.action'">
<input type="submit" value="更改" >

我想得到的效果是每个学生信息后面有一个复选框,选择后点击删除按钮能将数据库中相应的信息删除,该如何写呢?

12 个解决方案

#1


可以把选中的选项里面的value拼接成一个字符串(或者数组),然后送到action逐个处理就好了吧应该,类似于这种想法

#2


引用 1 楼 linwantong90711 的回复:
可以把选中的选项里面的value拼接成一个字符串(或者数组),然后送到action逐个处理就好了吧应该,类似于这种想法
不是很明确啊~

#3


通过actionform把值传递到后台,后台获取值,然后利用获取的值组合删除条件,执行操作数据库的SQL进行删除。

#4


引用 3 楼 mantou0611 的回复:
通过actionform把值传递到后台,后台获取值,然后利用获取的值组合删除条件,执行操作数据库的SQL进行删除。
<script type="text/javascript">
    function  deleteStudents(){          
       stuForm.action=" delete_stu_by_id.action" ;
          stuForm.submit();
              }
          </script>
  <head>
    <title>ShowAllStudent</title>

  </head>

 
  <body>
<form action=""  method="post"  name="stuForm">
    <table border="1">    
<tr>     
<td >学号</td>     
<td width="50">姓名</td>   
<td width="50">年龄</td>  
<td width="50">性别</td>  
<td width="50">班级</td>
<td  align="center">操  作</td>
</tr>   
<s:iterator id="student" value="#attr.list" > 
 <tr>

        <td><s:property value="stuNo"/></td>
    <td><s:property value="name"/></td>
<td><s:property value="age"/></td>
<td><s:property value="sex"/></td>
<td><s:property value="stuClass"/></td>
<td><input type="checkbox" value="stuNo" > </td>
 </tr>
   </s:iterator>
    </table> 

<input type="button" value="删除" onclick="window.location.href='tt/delete_stu_by_id.action?stuNo='+<s:property value="stuNo"/>">
<input type="submit" value="更改" >
</form> 
  </body>
</html>
这是jsp
public class DeleteOneStu extends ActionSupport{
private String stuNo;


public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}

public String delete()throws Exception{
String stuNo= ServletActionContext.getRequest().getParameter("stuNo"); 
StudentDaoEntity studentDao = new StudentDaoEntity();
studentDao.delStu(stuNo);
return "delete_success";
}


}
这是后台action   
可以这么用么?为什么报错呢?我该怎么修改?

#5


前台
><input type="checkbox" value="stuNo" name="stuNo">

后台
public class DeleteOneStu extends ActionSupport{
private String[] stuNo; //或者你的主键是Integer或Long就对应它的数组 Integer[]...

public String[] getStuNo() {
return stuNo;
}
public void setStuNo(String[] stuNo) {
this.stuNo = stuNo;
}

public String delete()throws Exception{
StudentDaoEntity studentDao = new StudentDaoEntity();
for(String numb:stuNo){
                      studentDao.delStu(numb);
                 }
                 //studentDao.delStu(stuNo);
return "delete_success";
}


}

其实你应该在Service层或在Dao层实现一个批量删除的方法,前台Action只是接收请求,调用相应的方法而已.

#6


可以使用ajax来实现,删除时把需要删除的数据的id值的集合传到后台,后台操作后返回状态,如果成功在页面用js把页面数据删除。

#7


引用 4 楼 dxy860812 的回复:
这是后台action   
可以这么用么?为什么报错呢?我该怎么修改? ……


这种做法的问题在于table是循环出来的列表,而事件后面的onclick="window.location.href='tt/delete_stu_by_id.action?stuNo='+<s:property value="stuNo"/>">  中的<s:property value="stuNo"/>究竟取哪个值,其实这个值是空的,因为这样写法会从后台找对应的action中的变量stuNo。
table中循环的最后一列:<td><input type="checkbox" value="stuNo" > </td>  应该写成
<td><input type="checkbox" value="<s:property value='stuNo'/>" > </td> 这样才会把每行循环的stuNo赋给checkbox的value,最好加个name属性 ,方便js取值
最后在点击删除按钮时,如果是单选的话,用脚本获取选中那行 checkbox中的值,传给参数stuNo
如果是多选的话,可以拼接字符串或者json格式传给后台,后台进一步解析字符串或者json格式字符串。

#8


#6 得分:0 回复于: 2013-04-18 09:12:41 
可以使用ajax来实现,删除时把需要删除的数据的id值的集合传到后台,后台操作后返回状态,如果成功在页面用js把页面数据删除。 

#9


引用 8 楼 wyx100 的回复:
#6 得分:0 回复于: 2013-04-18 09:12:41 
可以使用ajax来实现,删除时把需要删除的数据的id值的集合传到后台,后台操作后返回状态,如果成功在页面用js把页面数据删除。
在传回的页面是如何删除的呢?整个表单都是ajax么?

#10


你在删除时,传递一个参数到action中,这个参数就是主键。在后台调用deletebyId(long id)就行了.

至于删除之后的回显,在调用一次getAll()获得list,把list放入requset中,就可以了。

#11


引用 10 楼 yoxibaga 的回复:
你在删除时,传递一个参数到action中,这个参数就是主键。在后台调用deletebyId(long id)就行了.

至于删除之后的回显,在调用一次getAll()获得list,把list放入requset中,就可以了。
前台如何进行传递这个参数呢?

#12


引用 11 楼 dxy860812 的回复:
Quote: 引用 10 楼 yoxibaga 的回复:

你在删除时,传递一个参数到action中,这个参数就是主键。在后台调用deletebyId(long id)就行了.

至于删除之后的回显,在调用一次getAll()获得list,把list放入requset中,就可以了。
前台如何进行传递这个参数呢?

<form action="" method="post">直接在action里传递参数。
或者使用隐藏字段<input type="hidden" name="id" value="">

#1


可以把选中的选项里面的value拼接成一个字符串(或者数组),然后送到action逐个处理就好了吧应该,类似于这种想法

#2


引用 1 楼 linwantong90711 的回复:
可以把选中的选项里面的value拼接成一个字符串(或者数组),然后送到action逐个处理就好了吧应该,类似于这种想法
不是很明确啊~

#3


通过actionform把值传递到后台,后台获取值,然后利用获取的值组合删除条件,执行操作数据库的SQL进行删除。

#4


引用 3 楼 mantou0611 的回复:
通过actionform把值传递到后台,后台获取值,然后利用获取的值组合删除条件,执行操作数据库的SQL进行删除。
<script type="text/javascript">
    function  deleteStudents(){          
       stuForm.action=" delete_stu_by_id.action" ;
          stuForm.submit();
              }
          </script>
  <head>
    <title>ShowAllStudent</title>

  </head>

 
  <body>
<form action=""  method="post"  name="stuForm">
    <table border="1">    
<tr>     
<td >学号</td>     
<td width="50">姓名</td>   
<td width="50">年龄</td>  
<td width="50">性别</td>  
<td width="50">班级</td>
<td  align="center">操  作</td>
</tr>   
<s:iterator id="student" value="#attr.list" > 
 <tr>

        <td><s:property value="stuNo"/></td>
    <td><s:property value="name"/></td>
<td><s:property value="age"/></td>
<td><s:property value="sex"/></td>
<td><s:property value="stuClass"/></td>
<td><input type="checkbox" value="stuNo" > </td>
 </tr>
   </s:iterator>
    </table> 

<input type="button" value="删除" onclick="window.location.href='tt/delete_stu_by_id.action?stuNo='+<s:property value="stuNo"/>">
<input type="submit" value="更改" >
</form> 
  </body>
</html>
这是jsp
public class DeleteOneStu extends ActionSupport{
private String stuNo;


public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}

public String delete()throws Exception{
String stuNo= ServletActionContext.getRequest().getParameter("stuNo"); 
StudentDaoEntity studentDao = new StudentDaoEntity();
studentDao.delStu(stuNo);
return "delete_success";
}


}
这是后台action   
可以这么用么?为什么报错呢?我该怎么修改?

#5


前台
><input type="checkbox" value="stuNo" name="stuNo">

后台
public class DeleteOneStu extends ActionSupport{
private String[] stuNo; //或者你的主键是Integer或Long就对应它的数组 Integer[]...

public String[] getStuNo() {
return stuNo;
}
public void setStuNo(String[] stuNo) {
this.stuNo = stuNo;
}

public String delete()throws Exception{
StudentDaoEntity studentDao = new StudentDaoEntity();
for(String numb:stuNo){
                      studentDao.delStu(numb);
                 }
                 //studentDao.delStu(stuNo);
return "delete_success";
}


}

其实你应该在Service层或在Dao层实现一个批量删除的方法,前台Action只是接收请求,调用相应的方法而已.

#6


可以使用ajax来实现,删除时把需要删除的数据的id值的集合传到后台,后台操作后返回状态,如果成功在页面用js把页面数据删除。

#7


引用 4 楼 dxy860812 的回复:
这是后台action   
可以这么用么?为什么报错呢?我该怎么修改? ……


这种做法的问题在于table是循环出来的列表,而事件后面的onclick="window.location.href='tt/delete_stu_by_id.action?stuNo='+<s:property value="stuNo"/>">  中的<s:property value="stuNo"/>究竟取哪个值,其实这个值是空的,因为这样写法会从后台找对应的action中的变量stuNo。
table中循环的最后一列:<td><input type="checkbox" value="stuNo" > </td>  应该写成
<td><input type="checkbox" value="<s:property value='stuNo'/>" > </td> 这样才会把每行循环的stuNo赋给checkbox的value,最好加个name属性 ,方便js取值
最后在点击删除按钮时,如果是单选的话,用脚本获取选中那行 checkbox中的值,传给参数stuNo
如果是多选的话,可以拼接字符串或者json格式传给后台,后台进一步解析字符串或者json格式字符串。

#8


#6 得分:0 回复于: 2013-04-18 09:12:41 
可以使用ajax来实现,删除时把需要删除的数据的id值的集合传到后台,后台操作后返回状态,如果成功在页面用js把页面数据删除。 

#9


引用 8 楼 wyx100 的回复:
#6 得分:0 回复于: 2013-04-18 09:12:41 
可以使用ajax来实现,删除时把需要删除的数据的id值的集合传到后台,后台操作后返回状态,如果成功在页面用js把页面数据删除。
在传回的页面是如何删除的呢?整个表单都是ajax么?

#10


你在删除时,传递一个参数到action中,这个参数就是主键。在后台调用deletebyId(long id)就行了.

至于删除之后的回显,在调用一次getAll()获得list,把list放入requset中,就可以了。

#11


引用 10 楼 yoxibaga 的回复:
你在删除时,传递一个参数到action中,这个参数就是主键。在后台调用deletebyId(long id)就行了.

至于删除之后的回显,在调用一次getAll()获得list,把list放入requset中,就可以了。
前台如何进行传递这个参数呢?

#12


引用 11 楼 dxy860812 的回复:
Quote: 引用 10 楼 yoxibaga 的回复:

你在删除时,传递一个参数到action中,这个参数就是主键。在后台调用deletebyId(long id)就行了.

至于删除之后的回显,在调用一次getAll()获得list,把list放入requset中,就可以了。
前台如何进行传递这个参数呢?

<form action="" method="post">直接在action里传递参数。
或者使用隐藏字段<input type="hidden" name="id" value="">