您的位置:首页 > Web前端 > JavaScript

构建用户友好的web软件之删除数据

2007-03-13 12:03 274 查看
首先是一个列表界面,如下图所示



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




这个列表页面,也许是由很多查询条件查询出的结果,而且可能进行了分页,删除成功后,要仍然返回这个页面。方法有两个
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){

   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) {

  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>");
 }

//关闭窗口,并刷新父窗口
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'>");
  out.write("window.opener.location.reload();window.close();");  
  out.write("</script>");
 }

}

当然这样还有很多冗余代码,我们可以抽象一个DeleteBaseAction基类,把判断message的代码放到基类中,这样子类继承DeleteBaseAction,子类的代码就非常干净整洁了

DeleteBaseAction:类代码如下:

 public ActionForward execute(
ActionMapping mapping,
  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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息