首先是一个列表界面,如下图所示

点删除链接,如果删除成功,则直接刷新本页面,如果删除失败,则如下图所示,弹出提示框

这个列表页面,也许是由很多查询条件查询出的结果,而且可能进行了分页,删除成功后,要仍然返回这个页面。方法有两个
1.在request保存查询参数,再查询一次,得到这个页面,
2.利用javascript刷新页面,
对于第一种方式,因为参数较多,编程很麻烦,而且影响性能,代码不能重用,每个列表页面都要写一次
对于第2种方式,可以利用弹出窗口,巧妙的实现这样的效果
,这里假设我处理删除的是DeleteAction,主键为id
一. 删除链接
<a href="#" onclick="window.open('DeleteAction.do?id=9527')"> 删除</a>
二.DeleteAction
execute()方法代码如下:
public ActionForward execute()
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
String message = null; //返回错误信息
Manager manager=new Manager();//删除数据的业务逻辑类
if(!manager.delete(id)){//如果删除失败
message="删除失败!";
}
if(message ==mull){
JSDeleteHelper.closeAndRefresh();
}else{
JSDeleteHelper.closeAndAlert(response, message);
}
}
三.JSDeleteHelper帮助类
public class JSDeleteHelper{
//关闭窗口,并弹出提示信息
public static void closeAndAlert(HttpServletResponse response, String alert) {
public static void closeAndAlert(HttpServletResponse response, String alert) {
response.setContentType("text/html; charset=GBK");
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
out.write("<script language='javascript'>");
out.write("window.alert('" + alert + "!');window.close();");
out.write("</script>");
}
out.write("</script>");
}
//关闭窗口,并刷新父窗口
public static void closeAndRefresh(HttpServletResponse response, String alert) {
response.setContentType("text/html; charset=GBK");
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
out.write("<script language='javascript'>");
response.setContentType("text/html; charset=GBK");
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
out.write("<script language='javascript'>");
out.write("window.opener.location.reload();window.close();");
out.write("</script>");
}
}
out.write("</script>");
}
}
当然这样还有很多冗余代码,我们可以抽象一个DeleteBaseAction基类,把判断message的代码放到基类中,这样子类继承DeleteBaseAction,子类的代码就非常干净整洁了
DeleteBaseAction:类代码如下:
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
String message = executeLogic(mapping,form,request,response); //调用execute方法,这个方法由子类实现
if(message ==mull){
JSDeleteHelper.closeAndRefresh();
}else{
JSDeleteHelper.closeAndAlert(response, message);
}
//抽象方法,子类实现这个方法,加入业务逻辑
public abstract String executeLogic(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response);
ActionForm form,
HttpServletRequest request,
HttpServletResponse response);
}