A couple of comments - I'm streaming pdf files and using IE6 and my action
is only called once - are you sure its not a pre IE6 issue?

Secondly - what about implementing this behaviour in the request processor.
You could customise ActionMapping to add a contentType property - when
required you set this in the struts-config.xml for your Action - so in your
case set it to "application/pdf". The in your custom RequestProcessor if the
ActionMappings content type has been set and the "user-agent" is "contype"
then set the content type to the value specified and return. I've put sample
code for this below...


** Create your own custom ActionMapping and add a "contentType" property
with appropriate getters/setters.

** Create your own custom RequestProcessor and override the processMapping()
method - if the contentType property has been set for the ActionMapping,
then do your check

   protected ActionMapping processMapping(HttpServletRequest request,
                                           HttpServletResponse response,
                                           String path)

       ActionMapping  mapping = super.processMapping(request, response,
path);

       if (mapping == null || !(mapping instancof MyActionMapping))
           return mapping;

      // get content type set in struts-config.xml
      String contentType = ((MyActionMapping)mapping).getContentType();

      //the user-agent is set to contype only for the first request
      if (contentType != null &&
           request.getHeader("user-agent").equals("contype")) {
        response.setContentType(contentType);
        response.setStatus(HttpServletResponse.SC_OK);
        return null;
     }

     return mapping;

  }

** Configure Struts to use your custom ActionMapping class and set the
contentType property on the appropriate mapping. In the struts-config.xml

   <action-mappings className="myPackage.MyActionMapping">
       <action......>
            <set-property property="contentType" value="application/pdf"/>
       </action>
   </action-mappings>

** Configure Struts to use your custom RequestProcessor. In the
struts-config.xml

  <controller processorClass="myPackage.myRequestProcessor"/>

Niall


----- Original Message ----- 
From: "tvvincam" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, June 22, 2004 2:43 AM
Subject: Re: RE : problem with returning a pdf


Thanks for your help Frank, Davlid, Shayam,

Unfortunatly, non of the solutions worked.

I renamed my reset method in the form bean and am calling it manually
at the end of the action - this stops the booleans from being reset
when IE resubmits the request. Dodgy but it works.

Also, there was a bit of code on java.sun.com forum which helps to
stop the action from processing all the business logic 3 times, but
execute method is still called 3 times:

//work-around for IE streaming pdf bug
//http://support.microsoft.com/default.aspx?scid=kb;EN-US;q293792
String accLang = request.getHeader("accept-language");
String theAgent = request.getHeader("user-agent");

//the user-agent is set to contype only for the first request
if (request.getHeader("user-agent").equals("contype")) {
   response.setContentType("application/pdf");
   response.setStatus(HttpServletResponse.SC_OK);
   return null;
}

// IE 5.5 and IE 6 only has an accept-language header on the first
request so if present
// ignore this request
if (theAgent.indexOf("MSIE") != -1) {
 if (accLang != null) {
   response.setContentType("application/pdf");
   response.setStatus
(HttpServletResponse.SC_OK);
   return null;
 }
}

Cheers,
N



--- In [EMAIL PROTECTED], "David Gagnon" <[EMAIL PROTECTED]> wrote:
> Hi,
>
>  You can also look how FOP work around this problem:
>
> http://xml.apache.org/fop/faq.html#iex-servlet-multiple
>
> /David
>
> -----Message d'origine-----
> De : tvvincam [mailto:[EMAIL PROTECTED]
> Envoyé : June 20, 2004 22:22
> À : [EMAIL PROTECTED]
> Objet : problem with returning a pdf
>
> Hi,
>
> I'm using JasperReports to create a pdf based on user criteria
> submitted via a struts form.
>
> I've run into a problem with a feature in IE
> http://support.microsoft.com/default.aspx?scid=kb;EN-US;q293792
>
> Basically, IE will resubmit the request 3 times. This is causing a
> problem because the reset method is called on my form bean and
wipes
> out all my boolean selection criteria.
>
> The iText web site http://www.lowagie.com/iText/faq.html#msie
> has the following work around:
> <HTML>
> <BODY leftMargin=0 topMargin=0 scroll=no>
>   <EMBED src="http://myserver/pdfCreationServlet"; width="100%"
> height="100%" type=application/pdf fullscreen="yes">
> </body>
> </html>
>
> but I cannot figure out how to get the user input using this method.
>
> Is there a way around this problem? The only way I can think of
doing
> is to save the pdf byte[] in session and then get redirect the user
> to the above work around page. The above link will point to another
> action which will get the pdf byte[] from session and write it to
the
> response. I really don't like this solution and would appreciate
any
> help.
>
> Cheers,
> N
>
>
> --------------------------------------------------------------------
-
> 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