> -----Original Message-----
> From: Rizwan Merchant [mailto:[EMAIL PROTECTED]
> Sent: Friday, July 16, 2004 4:06 PM
> To: 'Struts Users Mailing List'
> Subject: RE: Intermediate loading page
> 
> 
> 
> Hi Craig,
> 
> Thanks for the reply. I came across this solution, but does 
> this not mean
> that the user will only be able to generate one report at a 
> time (since we
> are storing the flag in the user's session)? If the user 
> starts generating a
> second report which is much smaller than the first then would this not
> create a problem?

If you use the same session variable as a flag, then yes.. but you could use the same 
session variable
as a "char of your choice" delimited string, where the values indicate the report name 
being generated.  Or, if you like easy.... a different session var for each report.

> 
> Thanks again for your input. Much appreciated.
> 
> -Riz.
> 
> -----Original Message-----
> From: Craig McClanahan [mailto:[EMAIL PROTECTED] 
> Sent: Friday, July 16, 2004 3:37 PM
> To: Struts Users Mailing List
> Subject: Re: Intermediate loading page
> 
> Rizwan Merchant wrote:
> 
> >  
> >
> > I am working on a web application using the Struts 
> framework. Using a 
> > form on a jsp page, I generate a report which is displayed 
> in pdf on a 
> > new screen. The report is generated through an Action class 
> method. I 
> > would like to display a "Please wait" screen while the 
> report is being 
> > generated.
> >
> > The action class method calls functions that generate a pdf 
> file and 
> > then redirects control to that file. So I cannot use the flush() 
> > method to send html to the browser while the report is 
> being generated 
> > (once a response is committed it cannot be written to 
> again). Neither 
> > can I use the 'div' tag method as my new page is not a jsp 
> page (it is 
> > a new browser window with pdf file displayed inside it).
> 
> One common strategy for this sort of thing is to refactor 
> your action into
> several, along the following lines:
> 
> * The Action that is currently creating the PDF should instead
>   fire off a background thread to do the report preparation.  It
>   will then forward to a "Please Wait" page (see below).
> 
> * The background thread should do whatever is needed to prepare
>   the PDF file, and set a flag variable in the user's session 
> when it's
> done,
>   followed by terminating the thread.
> 
> * The "Please Wait" page should say something like "Report generation
>   in progress", and use a meta-refresh tag to automatically 
> submit itself
>   every few seconds, with the destination being a "Done Yet" action.
> 
> * The "Done Yet" action will consult the flag variable in the user's
> session.
>   If its not there, forward back to the "Please Wait" page 
> again.  If it's
>   done, forward to the URL to retrieve the PDF itself.
> 
> Craig
> 
> 
> >
> > My code is shown below....
> >
> > //the jsp code calling the action
> > <nested:form action="/reports.do?action=getTransactionReports" 
> > target="_blank">
> >
> >
> > // The Action class
> > public ActionForward getTransactionReports(ActionMapping mapping, 
> > ActionForm form, HttpServletRequest request, HttpServletResponse 
> > response) throws Exception {
> >
> > ICustomerAdministrationClient admin_impl = 
> > getCustomerAdministrationService(request);
> >
> > //enforce user permission
> > enforceFeaturePermissions(EMSConstants.FEATURE_REPORTS, request, 1);
> >
> > EMSBaseAdminForm admin_form = (EMSBaseAdminForm)form; ReportsForm 
> > reportsForm = admin_form.getReportsForm();
> >
> > //cant do this as it creates an IllegalStateException // 
> PrintWriter 
> > html = response.getWriter(); // // 
> html.print("<html>\n<head><title>my 
> > test</title></head>\n<body>"); // html.print("<p><img 
> > src=\"images/dpt_logo.jpg\"></body></html>");
> > // html.flush();
> > // html.close();
> >
> >
> > //if details type is summary then output format can only be PDF
> > 
> if(reportsForm.getDetailsType().equals(EMSConstants.REPORTS_SUMMARY))
> > reportsForm.setOutputFormat(EMSConstants.REPORTS_FORMAT_PDF);
> >
> > //generate the reports using jasper reports 
> > doJasperReports(reportsForm, request);
> >
> > CustomerForm customer_form = (CustomerForm)getSessionObject(request,
> > "customerForm");
> > Collection all_region_list_forms =
> > (Collection)getSessionObject(request, "allRegionListForms");
> >
> > admin_form.setCustomerForm(customer_form);
> > admin_form.setRegionListForms(all_region_list_forms);
> > request.setAttribute(EMSConstants.FORM_VIEW, admin_form);
> >
> > String relativePath = File.separator + "temp_" + 
> > request.getSession().getId(); String pdfFilePath = File.separator + 
> > "temp" + relativePath + File.separator + "ReportinPDF.pdf"; String 
> > csvFilePath = File.separator + "temp" + relativePath + 
> File.separator 
> > + "ReportinCSV.dpt";
> >
> > 
> if(reportsForm.getOutputFormat().equals(EMSConstants.REPORTS_FORMAT_PD
> > F)) return (new ActionForward(pdfFilePath, true));
> >
> > return (new ActionForward(csvFilePath, true)); }
> >
> >
> > Any help would be appreciated. Thanks.
> > 
> --------------------------------------------------------------
> ----------
> >
> > <http://www.digitalpaytech.com/>
> >
> >             
> >
> > Rizwan Merchant - Software Developer
> > 4105 Grandview Highway, Burnaby, BC, V5C 6B4, Canada
> > Email:        [EMAIL PROTECTED] 
> > <mailto:[EMAIL PROTECTED]>
> > Phone:       604-688-1959 x243   Fax: 604-687-4329    
> > Toll Free:    1-888-687-6822       
> > Website:    www.digitalpaytech.com 
> <outbind://11/www.digitalpaytech.com>
> >
> >
> >  
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to