You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by albartell <al...@gmail.com> on 2005/08/09 15:43:21 UTC

Double Click for file download was ->RE: MyFaces and JasperReport

Jozef, have you gotten around the problem of a double click to get back to
the original form state.  Here is my problem. Whenever I use
ctx.responseComplete() it always seems to mess with the state of the
application. By that I mean when I click the button the first time it
submits the form and executes and displays the new page just fine.  But when
I go back to the parent page and click any button on the page it does a full
trip to the server without executing the action method. Then the second time
I hit the button it works just fine, but then ctx.responseComplete() is
executed again and the cycle starts all over again.

The only way I have been able to get around it in some instances is to use a
commandLink tag and do a target blank to a jsp page that reads in url parms
and determines what it needs to download.  This works because I never run
the ctx.responseComplete() method.

Does anyone know if responseComplete() has a bug in it, or if we are using
it incorrectly?

Aaron Bartell

-----Original Message-----
From: Jozef Hribik [mailto:jozef.hribik@apsoft.sk] 
Sent: Tuesday, August 09, 2005 6:39 AM
To: MyFaces Discussion
Subject: Re: MyFaces and JasperReport

Hi Henri,
 
1. put commandButton on JSF to call action method of managed bean; the PDF
will open in new browser window.
<h:form id="yourform" target="_blank">
<h:commandButton styleClass="btn" value="#{msg.btn_pdf}" 
action="#{reportMBean.createPdf}" />

2. and use something like this in your reportMBean

  public String createPdf() {

    FacesContext ctx = FacesContext.getCurrentInstance();
   
    if(!ctx.getResponseComplete()) {
      try {
        String baseDir = getBaseDir(ctx);
        HttpServletResponse response = (HttpServletResponse)
ctx.getExternalContext().getResponse();
       
        byte[] bytes = buildContent(baseDir);
       
        response.setContentType("application/pdf");
        response.setHeader("Content-Disposition", "inline;
filename=\"your_report_name.pdf\"");
        response.setHeader("Cache-Control", "max-age=10");
        response.setContentLength(bytes.length);

        OutputStream output = response.getOutputStream();
        output.write(bytes, 0, bytes.length);
        output.flush();
        output.close();
       
        ctx.responseComplete();
      }
      catch(BusinessException ex) {
// our BusinessException handling
        addBusinessExceptionMsg(ex);
        return NAV_SAME_PAGE;
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
    return null;
  }
 
  // we have all report-files in "/WEB-INF/report/"
  private String getBaseDir(FacesContext ctx) {
    String path = ((ServletContext)
ctx.getExternalContext().getContext()).getRealPath("/WEB-INF/");
    return path + File.separator + "report" + File.separator;
  }
 
  private byte[] buildContent(String baseDir) throws Exception {
   
    Map parameters = new HashMap();
    parameters.put("ReportTitle", "your_title");
    // etc. put all other needed parameters
    parameters.put("REPORT_RESOURCE_BUNDLE", getResourceBundle());
    parameters.put("REPORT_LOCALE", getResourceLocale());
   
    List dataList = yourBusinessService.getDataForReport(your_parameters);
   
    return JasperRunManager.runReportToPdf(baseDir +
"your_report_name.jasper",
                                                 parameters,
                                                 new
JRBeanCollectionDataSource(dataList));
  }
 
Good-luck
Jozef Hribik  

Delbrouck, Henri-Philippe wrote:

> Hi,
>
> Could anybody tell me if it is possible to use JasperReport with 
> MyFaces in order to generate pdf and xls file.
> Is there any documentation about that.
>
> Thanks for any help.
>
> Henri-Philippe Delbrouck
>
>
>
>
>
> __________ Informacia od NOD32 1.1189 (20050808) __________
>
> Tato sprava bola preverena antivirusovym systemom NOD32.
> http://www.eset.sk
>
>
> __________ Informacia od NOD32 1.1189 (20050808) __________
>
> Tato sprava bola preverena antivirusovym systemom NOD32.
> http://www.eset.sk



Re: Double Click for file download was ->RE: MyFaces and JasperReport

Posted by Carsten Burghardt <ca...@cburghardt.com>.
Am Tuesday 09 August 2005 15:43 schrieb albartell:
> The only way I have been able to get around it in some instances is to use
> a commandLink tag and do a target blank to a jsp page that reads in url
> parms and determines what it needs to download.  This works because I never
> run the ctx.responseComplete() method.

Can you provide details about this? I have the same problem - the action only 
works the second time.


Carsten