我希望在用户点击按钮,进入AciontListener处理完业务后,如果该操作非法,需要弹出窗口提示用户哪里有问题,可以更正后再次操作。
    我在ActionListener里,写了如下代码,弹出一个模式窗口提示出错,已经做到了.
HttpServletResponse response = (HttpServletResponse)ctx.getExternalContext().getResponse();
ServletOutputStream out = response.getOutputStream();
StringBuffer buf = new StringBuffer();
buf.append("<script type=\"text/javascript\">\n");
buf.append("var rtn=window.showModalDialog('");
......
buf.append("</script>");
    问题是,弹出窗口后,父页面出现了空白.如果返回上次父页面继续操作,则所有数据都丢失掉了.
    我希望父页面保持原样不变,以便用户改变某个选项继续刚才的操作,不知道该怎么解决这个问题?

解决方案 »

  1.   

    提示出错用一个alert不就行了?
      

  2.   

    上面这位老兄说的也是,我先试试只弹出alert消息.
      

  3.   

    你在alert后面加一个return false,这样就什么都不做,你的信息也应该还在
      

  4.   

    我刚是过用alert提示消息,的确可以保持原信息不丢失,谢谢hrwhat()的指点.
      

  5.   

    那么你的日期是用什么存的呢,选择日期后,是用一个text显示所选的日期还是其它方法?
      

  6.   

    那你用一个hidden存一下日期的值,写入数据库的时候把hidden的值写进去就行啦
      

  7.   

    但是需求是点击"到帐"按钮后,选取到帐日期后,自动保存所有数据,我觉得这样做难度很大。你的意思应该是说选取了日期后通过js改变客户端hidden控件的值,然后提交保存吧。
      

  8.   

    根据你的提醒,我的设想是, 点击按钮后用js弹出一个模式窗口,确定后将选取的日期写到一个hidden控件的值上,然后会自动保存,但会出现最上面提到的丢失数据的问题。
      

  9.   

    你现在点“到帐”按钮出错后信息就丢失了?那你出错是什么错呢?能捕捉到Exception吧
      

  10.   

    我用window.showModalDialog父页面是不会出现空白的啊
      

  11.   

    提交后的业务逻辑判断分支很多,我是通过在一个vo里的一个retval,retmsg来设置返回值和返回消息的,比如出错时捕获到Exception后设置retval和retmsg值,retval=-1,retmsg为相应错误信息,然后ActionListener逻辑处理之后统一判断,如果retval<0就提示出错信息,如果>0也可能什么都不提示.
      

  12.   

    如果retval<0就提示出错信息,之后加上history.go(-1);这样试试
      

  13.   

    加上history.go(-1)应该不可行,因为我之前父窗口出现空白页时,我是点击IE的返回按钮返回的,和history.go(-1)是一样的。
      

  14.   

    暂时还找不到解决办法,如果你解决了请发我邮箱告知:[email protected]谢谢!
    下班了
      

  15.   

    function openWindow(){
    var nowWin = window.open("");
    nowWin.document.write('122334455667788');
    }这段代码是动态写窗体的javascript,你可以将你拼好的内容放到write里,就可以打开一个子窗体
    而不影响父窗体了。
      

  16.   

    zcy_shenyang825135,你的意思调用js函数openWindow(msg)来弹出消息吧?
    function openWindow(msg){
    var nowWin = window.open("");
    nowWin.document.write(msg);
    }
    弹出消息已经解决了不影响父窗体的问题,现在的问题是需要弹出的窗口不仅仅是消息,是要弹出日历框,选择日期后,保存到数据库后就会影响父窗体。
      

  17.   

    如果要弹出窗口的话为什么要跑到Action中走一圈再回来呢?这本来就是客户端的东西,在客户端开模式窗口怎么会出现父窗口数据丢失的事呢?function doOpenModelWindow()
    {
       if(window.showModalDialog)
       {
          var returnValue = showModelDialog("/jsp/你的那个窗口的jsp或者html路径?prama=value1&param2=value2",help=0;status=0;center=yes;dialogWidth=100pt;dialogHeight=100pt");
          //取得窗口返回值returnValue的后续处理
        }
    }
      

  18.   

    弹出窗口的确是客户端js的工作,但是jsf的事件驱动机制,需要到服务端获取数据并处理,之后再返回页面。这是jsf与jsp,struts的最明显的区别之一吧.