第二次调用showModalDialog时走后台代码后再返回前台时异常问题

xbdvcx2 2005-11-10 08:21:27
在主窗体中用:
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);来弹出信息,此信息弹不出来!!
请高手指教!
...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xbdvcx2 2005-11-14
  • 打赏
  • 举报
回复
UP
xbdvcx2 2005-11-13
  • 打赏
  • 举报
回复
请大家再再辛苦一下,仔细看一下,多谢了.
liu_you 2005-11-12
  • 打赏
  • 举报
回复
你是大爷!
xbdvcx2 2005-11-12
  • 打赏
  • 举报
回复
重申一遍:以上代码在用window.open时是绝对正确的.
请大家再仔细看一下,代码是没有问题的,只是不清楚window.open 和 window.showModalDialog的区别而已
liu_you 2005-11-11
  • 打赏
  • 举报
回复
1)strRetu == ""&&strMess.length > 1确定成立?
2)子窗体完成所有的控制逻辑?增加子窗体的复杂度不说,对于整个体系的理解也难了!
zqpsswh 2005-11-11
  • 打赏
  • 举报
回复
我看可能是你的代码逻辑有问题

业务错误时打不开的话

可能是 if(strMess.length > 1)
这条语句一直没有运行
你检查下业务错误时返回的这个值可能是个空值
xbdvcx2 2005-11-11
  • 打赏
  • 举报
回复
主窗体:
===================================
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时是绝对正确的.
yaray 2005-11-10
  • 打赏
  • 举报
回复
showModalDialog() (IE 4+ 支持)
  showModelessDialog() (IE 5+ 支持)

使用方法如下:
vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])
vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures])

参数说明:
sURL
必选参数,类型:字符串。用来指定对话框要显示的文档的URL。
vArguments
可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。
sFeatures
可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
zqpsswh 2005-11-10
  • 打赏
  • 举报
回复
把代码写出来

你的JS代码有问题
liu_you 2005-11-10
  • 打赏
  • 举报
回复
是根据nRetu做判断?
我觉得思路是:
1,正常情况下,returnValue=null;
2,出现异常,returnValue=ErrorMsg;
根据nRetu是否为null确定是否alert(nRetu);

ps:modalDialog的那个页面最后必然有window.close()子句才是哦.
xbdvcx2 2005-11-10
  • 打赏
  • 举报
回复
UP

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧