龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

在BS系统中使用模态对话框(showModalDialog)的解决方案

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
我们知道在BS系统中假如想使用模态对话框,我们就要用window.showModalDialog()这个方法, showModalDialog()方法是用来创建一个显示Html内容的模态对话框,这篇文档是用来对使用showModalDialog()产生

  

       我们知道在BS系统中假如想使用模态对话框,我们就要用window.showModalDialog()这个方法, showModalDialog()方法是用来创建一个显示Html内容的模态对话框,这篇文档是用来对使用showModalDialog()产生模态对话框进行各种应用时产生的问题的解决方法,这篇文档适用于ASP,PHP,jsp等多种web技术,下面sample代码的我会用jsp。
  注:这篇文档不涉及showModalDialog()方法的说明
  需要了解的请参阅 Msdn文档,和KingErq网友的文档
  http://dev.csdn.net/develop/article/44/44896.shtm

  我们先写一个大家都很熟悉的showModalDialog()最简单的使用-我们重写一下javascript中window的alert()方法.
  我们先做的事情是新建一个文件alert.jsp
  代码为:
  <%@ page contentType="text/html;charset=GBK" language="Java" pageEncoding="GBK" %>
  <%
  request.setCharacterEncoding("GBK");
  String msg=request.getParameter("msg");%>
  <html XMLns:wsc>
  <head>
  <title>#您的系统名称#----------------------------</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script language=javascript>
  function findenter()
  {
  if (event.keyCode==13)
  window.close();
  }
  </script>  
  </head>
  <body onkeydown=javascript:findenter();>
   <center>
   <div style="overflow:auto;height:60px" align="center">
          <%=msg%>
   </div>
   <input type=Button value="确定" onclick="javascript:window.close();">
   </center>
   </body>
  </html>

  然后在你BS系统的unit.js文件中添加下面一个方法
  function alert(msg)
  { 
      var w=250;
      var h=150;
      posLeft=(screen.width-w)/2
  posTop=(screen.height-h)/2
  showModalDialog("alert.jsp?msg=" + msg,"","status:no;dialogHeight: " + h +"px; dialogWidth: " + w +"px;status:no;scroll:no;dialogTop: " + posTop + "px; dialogLeft: " + posLeft + "px'");
  }
  这时候在引用了unit.js的页面中用 alert()方法时,出现的模式对话框就是我们自己定义的alert.jsp对话框了.用这种方法,我们可以在我们的系统中用showModalDialog方法把 window.alert(), window.confirm(),window.prompt() 等ie的默认的提示框都重写一边,这样系统的ui风格就得到了统一,更加美观.
     
  用showModalDialog模拟alert是他最简单的应用,而大部分的BS系统中我们使用模态对话框的目的是有一个清单页面list.jsp,我们要双击list.jsp页面的一条记录时 弹出edit.jsp这个模态对话框,对这条记录进行编辑,这时候问题来了,在模态对话框的文件是不能重新载入的,就是说假如我们在edit.jsp文件里把<form>的数据post到save.jsp的时候,save.jsp不会在模态对话框里出现,而是弹出一个新的IE窗口,这显然是不能忍受的.这个问题的解决方法是这样的:
  我们建立一个中间页面 比如openWindow.jsp
  我们想在模态对话框中打开edit.jsp的时候调用
  showModalDialog打开openWindow.jsp页面,并把edit.jsp的文件名通过get方法传递给openWindow.jsp.
  
  

精彩图集

赞助商链接