Hi,

A simpliest solution for resolve such a problem:

The form that previously runs the pdf generation know do a forward to 
A jsp page indicating "please wait" and that contains a "onload" tag
That post a request to  the action that construct the pdf report.


Such a solution a easier to develop (no thread) but has limitations:
The generation duration shall be less the the http timeout and the user 
Must wait the end of generation before be able to do anything else...



-----Message d'origine-----
De : Craig McClanahan [mailto:[EMAIL PROTECTED] 
Envoyé : samedi 17 juillet 2004 02:23
À : Struts Users Mailing List
Objet : Re: Intermediate loading page

Rizwan Merchant wrote:

>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?
>
>  
>
You could accomodate such a thing in several different ways, but how 
would the user even start requesting the second report?  If they're 
sitting on the auto-repeat "Please Wait" page, they won't have the 
opportunity.  If you want them to be able to go request a second report 
while the first one is still generating, you'll probably be better off 
just navigating back to the main menu (or something) after firing off 
the first thread, then let them fire off a different thread (using a 
different flag) for the second report -- then have a screen where they 
can "pick up" their completed reports and display them.

If the computational effort to produce reports becomes severe, you might 
also consider using some sort of job queueing package so that a single 
background thread could do the report generation for all your users (one 
report at a time).  If you go this way, the "pick up your completed 
report" page becomes an even better idea.

>Thanks again for your input. Much appreciated.
>
>-Riz.
>
>  
>
Craig

>-----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]



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

Reply via email to