页面1中有一按钮,点击后进行业务处理并生成打印方法的参数,同时开启页面2,需要根据页面1生成的参数生成打印数据。 我有一思路:点击页面1按钮时,通过js打开一空页面2,按钮事件处理完后,再次响应页面2,不知道是否合理?如何实现?谢谢!!!

解决方案 »

  1.   


    ...这里是打印方法参数生成代码;
    window.open("2.html");很简单的!
      

  2.   

    思路可行的,将页面1导出到WORD(页面2)并打印:
    先创立记录集rs,保存查询出来的记录集,然后
    try{
        ResultSetMetaData rsmd=rs.getMetaData();
       int no=1;
        while(rs.next()){
          out.println("<tr>");
          out.println("<td height='25' align='center' bgcolor='#FFFFFF'>"+no+"</td>");
          for(int i=2;i<=rsmd.getColumnCount();i++){
            %>
              <td align="center" bgcolor="#FFFFFF">&nbsp;<%=rs.getString(i)%></td>
            <%
         }
         out.println("</tr>");
         no++;
        }
      }catch(Exception e){
        System.out.println(e.getMessage());
      }
    使用下面函数将页面信息输出到WORD
    <script language="javascript">
    function outDoc(){
      var table=document.all.customer;
      row=table.rows.length;
      column=table.rows(1).cells.length;
      var wdapp=new ActiveXObject("Word.Application");
      wdapp.visible=true;
      wddoc=wdapp.Documents.Add();  //添加新的文档
      thearray=new Array();
    //将页面中表格的内容存放在数组中
    for(i=0;i<row;i++){
    thearray[i]=new Array();
    for(j=0;j<column;j++){
              thearray[i][j]=table.rows(i).cells(j).innerHTML;
    }
    }
    var range = wddoc.Range(0,0);
    range.Text="客户信息列表"+"\n";
    wdapp.Application.Activedocument.Paragraphs.Add(range);
    wdapp.Application.Activedocument.Paragraphs.Add();
    rngcurrent=wdapp.Application.Activedocument.Paragraphs(3).Range;var objTable=wddoc.Tables.Add(rngcurrent,row,column)     //插入表格
    for(i=0;i<row;i++){
    for(j=0;j<column;j++){
    objTable.Cell(i+1,j+1).Range.Text = thearray[i][j].replace("&nbsp;",""); }
    }
    wdapp.Application.ActiveDocument.SaveAs("customerList.doc",0,false,"",true,"",false,false,false,false,false);
    wdapp.Application.Printout();
    wdapp=null;
    }
    </script>
    通过链接<a href="#" onClick="outDoc();">打印</a>调用打印
      

  3.   

    我是使用jasperreport生成pdf的,生成没有问题。
    现在主要的问题是如何传递参数(存于session bean中)到页面2
    在页面1中的按钮的onclick中window.open"/xx/faces/newPage1.jsp", "_blank","height="+screen.availHeight+",width=,"+screen.availWidth - 195 +"toolbar=no,menubar=no,status=yes,scrollbars=yes")
    打开空的页面2,然后按钮事件处理完后,声称参数存放于session bean,这时候如何响应页面2,使其取得此参数。
      

  4.   

    可以用ajax,点击按钮后,发送数据到后台,让后面生成参数,生成完后就可以返回给当前页面,也可以直接在后台生成一个临时文件。然后,前台根据返回的标志位,决定什么时候弹出打印窗口。打印窗口中其实就可以根据传过来的参数或者直接去临时文件获取,来产生打印内容。最后就是打印了。临时文件可以用各种形式,建议xml
      

  5.   

    我也是用jasperreport的,,试过生成出PDF 和 excel我把报表数据获取写在jasperreport里,再用页面调时把参数传进去,这样jasperreport就可以根据你的条件,
    获取对应的记录了,并生成一个报表,再把这个报表output出来就可以啦,,,:)
      

  6.   

    stefli 的方法应该可行,但不熟悉ajax,现在这个问题比较急。j2ee的环境应该可以使用HttpServletResponse处理,哪位能够给个详细的解答?
      

  7.   

    那我再详细描述一下:
    1、页面1中有一个“缴费”按钮,按钮处理后生成一个打印字符串prtStr放到session bean中
    (this.getSessionBean1().setPrintString(printStr);)
    2、“缴费”按钮javascript的onclick()中打开打印页面2 {window.open"/yx/faces/newPage1.jsp", "_blank","height="+screen.availHeight+",width=,"+screen.availWidth - 195 +"toolbar=no,menubar=no,status=yes,scrollbars=yes");}3、打印页面2的初始化过程中取打印字符串(printStr = this.getSessionBean1().getPrintString();),生成打印的pdf文件现在存在的问题是在页面1的“缴费”按钮处理完毕生成打印字符串后,没有办法传给打印页面2,因为打开打印页面2 的代码在按钮的onclick()中,还没有处理就已经打开页面2了。需要等“缴费”按钮处理完毕后,再次响应页面2,将打印字符串传给页面2
      

  8.   

    1.AJAX
    2.写一个JS函数:
    页面2 onload js定时器,页面2不断查看request传过来的字符串是不是空的,如果是继续不断查看,如果不是,获取其中的值显示出来,停止定时器
      

  9.   

    to whjwu :能不能把第二种方法写出来?