使用这个之前,你要先懂得
- struts2的配置
- 基础的el语法
- action的分配
- 返回值的回调
- 一定的ajax和jquery基础
首先你要配置好web.xml,applicationContext-beans.xml,applicationContext.xml,这里不展开说
第一种方法比较简单直接在按钮搞个链接,链接上有id参数
首先配置struts.xml里的action
<!-- method通配符,执行方法自动对应*的内容 -->
<action name="emp-*" class="employeeAction"
method="{1}">
<!-- 显示所有员工 -->
<result name="list">/WEB-INF/views/emp-list.jsp</result>
<!-- 删除后重定向的所有员工列表 -->
<result name="success" type="redirect">/emp-list</result>
</action>
页面的关键部分
<a href="emp-delete?id=${id }">Delete</a>
Action部分
public class EmployeeAction extends ActionSupport implements RequestAware{
private static final long serialVersionUID = 1L;
//员工增删查改的封装,具体代码可以忽略
private EmployeeService employeeService;
public void setEmployeeService(EmployeeService employeeService) {
this.employeeService = employeeService;
}
public String list() {
request.put("employees", employeeService.getAll());
return "list";
}
private Integer id;
//自动获取传入id
public void setId(Integer id) {
this.id = id;
}
public String delete() {
employeeService.delete(id);
return "success";
}
private Map<String, Object> request;
@Override
public void setRequest(Map<String, Object> arg0) {
this.request = arg0;
}
}
点击那个链接之后就会直接删除掉那个数据并重定向到所有员工的列表
第二种方法比较高级,用到ajax
因为通常我们删除都需要确定,并不是一点击就删除然后跳转
重新配置struts.xml里的action
<!-- method通配符,执行方法自动对应*的内容 -->
<action name="emp-*" class="employeeAction"
method="{1}">
<!-- 显示所有员工 -->
<result name="list">/WEB-INF/views/emp-list.jsp</result>
<!-- 返回ajax-success时以流的方式接收 -->
<result type="stream" name="ajax-success">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
</action>
页面主要代码
<tr>
<!-- 省略其他行 -->
<td>
<a href="emp-delete?id=${id }" class="delete">Delete</a>
<input type="hidden" value="${lastName }"/>
</td>
</tr>
要调用的js
<script type="text/javascript">
$(function(){
//1. 点击 delete 时, 弹出 确定是要删除 xx 的信息吗 ? 若确定, 执行删除, 若不确定, 则取消
$(".delete").click(function(){
var lastName = $(this).next(":hidden").val();
var flag = confirm("确定要删除" + lastName + "的信息吗?");
if(flag){
var $tr = $(this).parent().parent();
//删除, 使用 ajax 的方式
var url = this.href;
var args = {"time":new Date()};
$.post(url, args, function(data){
//若 data 的返回值为 1, 则提示 删除成功, 且把当前行删除
if(data == "1"){
alert("删除成功!");
$tr.remove();
}else{
//若 data 的返回值不是 1, 提示删除失败.
alert("删除失败!");
}
});
}
//取消超链接的默认行为
return false;
});
})
</script>
Action代码
public class EmployeeAction extends ActionSupport implements RequestAware{
private EmployeeService employeeService;
public void setEmployeeService(EmployeeService employeeService) {
this.employeeService = employeeService;
}
public String list() {
request.put("employees", employeeService.getAll());
return "list";
}
private Integer id;
//设置传入id
public void setId(Integer id) {
this.id = id;
}
//利用输入流传回,通常返回一些标记值(0或1之类的)
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
public String delete() {
//成功返回1,失败返回0
try {
employeeService.delete(id);
inputStream = new ByteArrayInputStream("1".getBytes("UTF-8"));
} catch (Exception e) {
e.printStackTrace();
try {
inputStream = new ByteArrayInputStream("0".getBytes("UTF-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
return "ajax-success";
}
private Map<String, Object> request;
@Override
public void setRequest(Map<String, Object> arg0) {
this.request = arg0;
}
}
利用ajax的话更符合现实开发的需要,用户要先确定再执行操作,而且不用重定向,移除在当页面的进行,更加节省流量用户体验也更加好