在主窗体中用:
var strUrl = "GMF1020NEW.do?secCdv=" + sectionCdv + "&secName=" + sectionName + "&pstCdv=" + pstCdv + "&pstName=" + pstName;    var strPara = "dialogWidth:609px;dialogHeight:380px;Left:0px;Top:0px;status:no;scrollbars:no;Resizable:no;help:no;";
var nRetu = window.showModalDialog("",strUrl,strPara);
打开一个数据插入的窗体,插入过程中要用后台代码做业务逻辑的验证(不是简单的长度,非空等前台的数据格式验证),再将结果返回到前台,根据结果决定是显示一个业务错误的提示(用alert())还是关闭窗体,再刷新主窗体,显示新的数据.
现在第一次使用时好用,插入成功或直接关闭子窗体后再次打开后,当出现业务错误时,错误提示弹不出来,不知为何,当用window.open打开上面的 strUrl时就没有任何错误,开发环境: JDK1.4,weblogic8.1 struts 结构
前台用validate框架做的验证,此信息的弹出正常.
后台验证时返回错误代码,然后用strMess = "<bean:message key='W070023'/>";
alert(strMess);来弹出信息,此信息弹不出来!!
请高手指教!

解决方案 »

  1.   

    是根据nRetu做判断?
    我觉得思路是:
    1,正常情况下,returnValue=null;
    2,出现异常,returnValue=ErrorMsg;
    根据nRetu是否为null确定是否alert(nRetu);ps:modalDialog的那个页面最后必然有window.close()子句才是哦.
      

  2.   

    showModalDialog() (IE 4+ 支持)
       showModelessDialog() (IE 5+ 支持)使用方法如下:
        vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])
        vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures])参数说明:
        sURL
       必选参数,类型:字符串。用来指定对话框要显示的文档的URL。
        vArguments
       可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。
        sFeatures
       可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
      

  3.   

    主窗体:
    ===================================
    function goInsert(){
        var sectionCdv = document.forms[0].sectionCdv.value;
        var sectionName = document.forms[0].sectionName.value;
        var pstCdv = document.forms[0].pstCdv.value;
        var pstName = document.forms[0].pstName.value;
        var strUrl = "GMF1020NEW.do?secCdv=" + sectionCdv + "&secName=" + sectionName + "&pstCdv=" + pstCdv + "&pstName=" + pstName;
    var strPara = "dialogWidth:518px;dialogHeight:356px;Left:0px;Top:0px;status:yes;scrollbars:yes;Resizable:yes;help:no;"; var nRetu = window.showModalDialog(strUrl,1,strPara);
    if(nRetu == "0")
    {
        window.location.replace("SgmMGMF1000B.do");
    }    //window.open(strUrl,'','scrollbar=no width=500px height=300px left=0px top=0px');
    }子窗体:
    ================
    <SCRIPT>
    <!--//
    function closeWindows(){    if(window.confirm("<bean:message key='M070043'/>"))
        {
            window.document.forms[0].action = "GMF1020END.do";
            window.document.forms[0].submit();
        }
    }function confir(obj){
        var str ="<bean:message key='W070016'/>";
        if(validateSgmMGMF1020ActionForm(obj)){//validate验证
            if(window.confirm("<bean:message key='M070059' arg0='"+str+"'/>")){
            return true;
            }
        }
    return false;}//-->
    </SCRIPT><html:form action="GMF1020REGST.do" method="post" onsubmit="return confir(this);">
    ... ...
    ... ...
      <html:hidden property="messageText" />
      <html:hidden property="resultValue" />
    </html:form>
    <SCRIPT><!--//
        var strRetu = window.document.forms[0].resultValue.value;//结果标志
        var strMess = window.document.forms[0].messageText.value;//业务错误消息ID
        var retData = "0";    if(strRetu != "")//strRetu初始页面时置为""
        {
            if((strRetu == "runok") || (strRetu == "runclose"))//插入或关闭时执行后台代码后返回
            {
                if(strRetu == "runok")//插入成功,
                {
                    retData = "0"
                }
                else
                {//直接点击关闭按钮,  插入时走后台代码操作数据库,关闭时也要走一下后台做一些处理才能关闭窗体.
                    retData = "1";
            }
            window.returnValue = retData;
                window.close();
            }
            else
            {
                if(strMess.length > 1)
                {                if(strMess == "gidexist")//第一种业务错误
                    {
                        window.document.forms[0].acdGrpId.focus();
                        strMess = "<bean:message key='W070023'/>";
                    }
                    else   //第二种业务错误
                    {
                        window.document.forms[0].startAcdUsrId.focus();
                        strMess = "<bean:message key='W070026'/>";
                    }
                    window.alert("<bean:message key='M070001' arg0='"+strMess+"'/>");
                }
            }
        }
    //-->
    </SCRIPT>
    ===================================
    第一次怎么都对,第二次时出现业务错误时window.alert("<bean:message key='M070001' arg0='"+strMess+"'/>");这个消息弹不出,但光标定位是正确的,
    请大家帮忙.多谢.
    重申一遍:以上代码在用window.open时是绝对正确的.
      

  4.   

    我看可能是你的代码逻辑有问题业务错误时打不开的话可能是 if(strMess.length > 1)
    这条语句一直没有运行
    你检查下业务错误时返回的这个值可能是个空值
      

  5.   

    1)strRetu == ""&&strMess.length > 1确定成立?
    2)子窗体完成所有的控制逻辑?增加子窗体的复杂度不说,对于整个体系的理解也难了!
      

  6.   

    重申一遍:以上代码在用window.open时是绝对正确的.
    请大家再仔细看一下,代码是没有问题的,只是不清楚window.open 和  window.showModalDialog的区别而已