我的execute中有一段代码:
...
Map<String,String> parameters = new HashMap<String,String>();
InputStream in = getClass().getResourceAsStream("/reports/create.jasper");
ServletOutputStream  ServletOutputStream out=response.getOutputStream(); 
JasperRunManager.runReportToPdfStream(in,out,parameters, rds);
...
//return (mapping.findForward("success"));不能使用,只能返回null。
return null;rds实现了Jasper的数据接口JRDataSource。这里使用了JasperReport组件生成pdf文件,发送到客户端。发送后,IE显示嵌入的pdf文件。但是IE的Back按钮无效。无法回退到上一页进行其他操作,只能关闭IE。我想怎样才能在点“提交”后,自动打开另一个IE,显示PDF,本IE窗口可以使用return (mapping.findForward("success"));返回。

解决方案 »

  1.   

    在发送请求前,open一个窗口,open窗口的url设置为action的url
      

  2.   

    ypekk() :
    能说具体点吗?我对struts一知半解。
      

  3.   

    ypekk()所说open一个窗口应该是绑定到网页“提交”上面吗?怎么设置。
      

  4.   

    mapping.findForward("success"));这个就是新的窗口,为什么注掉了?
      

  5.   

    JasperRunManager.runReportToPdfStream(in,out,parameters, rds);将PDF通过response发送到客户端,mapping.findForward("success"))通不过,只能return null;
      

  6.   

    我知道你代码的意思,这么说吧,在你的代码里pdf是新的窗口了,为什么还要新窗口?你指的新窗口是什么意思?
      

  7.   

    可以像二楼说的一样,因为通过forward已经不能转到新的窗口了,open一个你要的jsp页面,如success
      

  8.   

    pdf不在新窗口,就在struts的action当前窗口,我现在没法再产生一个新窗口。
      

  9.   

    我觉得是不是要在JSP中加类似这样的东西?
     <html:submit onclick="oepnpdfwindows()">提交</html:submit>
    Javascript怎么写?
    具体在服务器端怎么处理?
      

  10.   

    比如你进入action方法前的页面是a.jsp,想在提交时进入b.jsp.
    你不要在a.jsp中直接进入action
    而是在点击提交按钮(你以前的提交按钮)时,利用javascript开一个新窗口。window.open,打开x.do(action的路径),这是完全的html,如果不清楚这个用法,在baidu找一下。
    然后在b.jsp中,进入action.
    按照你问的情况,问题应该可以解决了。
      

  11.   

    ypekk 客气了,你的第一次回复就让我茅塞顿开,这两天我试了果然如此。
    我有两个页面:create.jsp - finish.jsp
    我在create.jsp提交时,在finish.jsp页面中加入:
    <script type="text/javascript">
    <!--
    function pdfwindow(){
       window.open("report.do", "_blank", "top=0,left=0,width="+
       screen.availWidth+",height="+screen.availHeight+
       ",toolbar=yes,menubar=yes,scrollbars=yes,location=yes,resizable=yes,status=yes");
    }
    //-->
    </script>   
    这样当打开finish.jsp页面时,另一个窗口请求report.do,实现了我的要求。这里写详细一点,给有类似问题的朋友以提示。