KieselWiesel: pdf Output aus Servlet * * * *

Hallo erstmals

Hier hab ich vieleicht eine Knacknuss für euch!
Ich generiere aus einem Servlet ein pdf Output von Daten.
Damit mein Javascript nicht zu früh auf den Server geht und das pdf holen will um anzuzeigen, bevor es fertig Generiert wurde. Habe ich ein counter von 30s eingebunden. In dieser Zeit(ab 10s) frage ich den Server an.
In einem Frame den ich generiere, halte ich nach dem Fehler 404 ausschau.
Dies ist nicht die elgenateste Lösung aber sie funktioniert. Leider geb ich mich nicht gerne zufrieden mit solchen Codes. Vieleicht habt ihr ja eine Anregung oder sogar gleich eine Lösung. Aber ich wäre schon froh um eure kreativität. :)

PS: wenn ihr euch jetzt denk... easy... warte doch einfach bis das pdf fertig generiert wurde und mache dan den return... nein...
Der Client darf in dieser zeit nicht blockiert werden. Die Gründe erkläre ich hier nicht genauer da mein Post sonst schon etwas lange wirkt. ;)

Code:

<center>
<font face="Arial, Helvetica, sans-serif">
Der Report wird auf dem Server erstellt und in diesem Fenster in
 <input type="text" name="field" size="1">
Sekunden geladen.
</font>

</center>

<BR>
</form>
<script language="JavaScript"><!--
var maxcounter = $_timeToWaitForReport_$; //30s im Normalfall
var counter = maxcounter;
var reloadtime = 10;  // time between the reload tries and time when the first load try is launched                                       // after that reload is set to reloadtime
var tries = 0;       // counter for the tries, start with 0!
var maxtries = 5;    // numer of reload tries
var myURL = '$_rootForTemporaryPdfFiles_$$_nameOfPdfReport_$$_timeInMilliseconds_$.pdf'; //namengenerierung z.B. '../syntaxoutput/tmpfiles/SOP_PDF_Report_1079425245867.pdf';

// Test if the document already exists
function testLink() {
    if (newFrame.document.title.toLowerCase().indexOf("http 404 not found") != -1 ||
            newFrame.document.title.toLowerCase().indexOf("error") != -1 )
 {
  newFrame.location.href=myURL;
 }
 else
 {
  top.location.href=myURL;
 }
}

// Counter
function countDown() {

if (reloadtime >= maxcounter)
    {
     reloadtime = maxcounter-1;
    }
    if (tries == 0)
    {
        // show counter only if no reload tries started
        document.timer.field.value = counter;
     var value = eval((maxcounter-counter)*100/maxcounter);
     setSB(value,sb);
    }
    if (counter != 0)
    {
      if (counter == reloadtime)
      {
       newFrame.location.href=myURL;
      }
         counter--;
         setTimeout('countDown()',1000);
    }
    else
    {
  if (!testLink())
        {
         if (tries == maxtries)
         {
          alert(pSOPDocumentCouldNotBeLoaded);
          close();
         }
         counter = reloadtime;
         tries++;
         countDown();
        }
        else
        {
         top.location.href = myURL;
        }
    }
}

countDown();

// set status bar
function setSB(v, el)
{
 filterEl = el.children[0];
 if (filterEl.style.pixelWidth > 0)
 {
  var filterBackup = filterEl.style.filter;
  filterEl.style.filter = "";
  filterEl.style.filter = filterBackup;
 }
 filterEl.style.width = v + "%";
}

//--></script>

<!-- window for load tries; set height and width to 0 for production -->
<FORM NAME = "testLink"><INPUT TYPE = "hidden" NAME = "testValue"></FORM>
<IFRAME NAME = "newFrame" HEIGHT = 0 WIDTH = 0></IFRAME>
</body>
</html>

  1. Ich komm echt nicht weiter!
    Hat keiner von euch ne Idee... Ist hier meine letzte Station bevor ich den bettel hinschmeisse.
    Wäre echt dankbar da ich eher Java mag und mich nicht mit solchen javascripts herumschlagen will.
    THX for @ll auch für die, die es nur probieren.

    Greez TheKieselWiesel

    1. Moin moin,
      fühl dich nicht zu sehr auf die Füsse getreten, aber Drängel- und Nach-oben-schieb-Postings werden hier nicht gern gesehen.

      Nicht jeder der deine Frage beantworten könnte, schaut rund um die Uhr im Halbstunden-Takt in's Forum.

      Fazit: </faq/#Q-10> lesen und ein wenig geduldiger sein :-)

      Gruß
      Patrick