Se connecter / S'enregistrer
Votre question

pages jsp double traitement

Tags :
  • Jsp
  • Programmation
Dernière réponse : dans Programmation
16 Janvier 2007 15:42:41

Slt,
Je voudrais avoir des informations pour pouvoir faire du double traitement dans un site avec du jsp.
Mon problème est le suivant. Apres le clic sur un bouton, on doit tomber sur une page avec une barre d'avancement (le pourcentage) et faire le traitement derriere qui est lancé par un action.submit()..
Le probleme est que quand je fais suivre le clic sur le bouton par la page gerant la barre il ne veut plus faire le traitement qui suit..(le action.submit)
1 idée?

Autres pages sur : pages jsp double traitement

a c 145 L Programmation
16 Janvier 2007 17:35:03

Je ne vois pas l'intérêt de cette temporisation. Si c'est pour ralentir l'utilisateur (ce que je peux concevoir), il te suffit que ton formulaire contienne un appel à un javascript de cette manière:
<form onsubmit="return delay_it();">

et la fonction delay_it() ferait apparaitre ta barre de %age (div.style.display) et contiendrait quelque chose comme:
setTimeOut(eval('return true;'); 10000);
16 Janvier 2007 23:20:01

Tu peux déclencher le traitement côté serveur (dans ta jsp qui utilisera la couche métier de ton appli).
L'appel peut se faire en javascript (XmlHttpRequest alias ajax pour les intimes).

Ce mécanisme te permettra également de réaliser un watchdog pour suivre l'état d'avancement de la tâche serveur et présenter au client une barre de défilement représentant la progression.

XmlHttpRequest te permet de faire des traitements asynchrones, donc de poster 2 threads de traitements.
Contenus similaires
17 Janvier 2007 13:32:45

J'ai essayer de joindre les 2 solutions mais j'ai un autre souci..
J'ai mon tratement qui me renvoie du pdf et je voudrais savoir comment l'afficher en Pdf dans le browser...
J'utilise document.write mais je nai que du texte illisible bien sur..
Merci d'avance les gars
17 Janvier 2007 13:51:56

Pour afficher un pdf dans le navigateur, il faut pouvoir lire les pdf, à la base. Donc tu devrais installer Adobe Acrobat Reader. Tu le trouveras sur le site d'adobe.
17 Janvier 2007 14:26:00

d'habitude il n'ya pas de probleme, c'est a dire que mon navigateur est compatible mais je ne sais pas comment avec le XmlHttpRequest je peux afficher à l'ecran du pdf.
j'ai la variable "responseText contenant la chaine de caractere encodée representant le pdf.
Mais je fais:
document.open();
document.write(xhr_object.responseText)
document.close();

Et ca ne marche pas!!
En tout cas ca ne me donne pas du pdf à l'écran.
17 Janvier 2007 14:31:22

Fait plutôt un redirect vers le fichier pdf dans ce cas.
Sinon, tu n'auras pas les entêtes pdf dans ton document.
Ton responseText pourrait contenir une url, et tu fais un location.href=xhr_object.responseText;
17 Janvier 2007 15:50:55

Mais comment? peux tu m'expliquer cette redirection?
a c 145 L Programmation
17 Janvier 2007 17:08:13

il te l'a donné!
document.location.href=xhr_object.responseText;
17 Janvier 2007 17:54:14

Le truc c'est que le fichier pdf il est pas en dur et il ne peut pas l'etre car c'est un site ou toutes les 2 secs il ya un rapport pdf a generer..
J'utilise un ByteOUtpuStream en java pour avoir le bytecode correspondant que j'écris dans response.getOutputStream..
Du coup je peux pas rediriger vers une url correspondant à un fichier pdf car il n'est que en mémoire..
Avec l'attente "bete" de l'utilisateur et sans le double traitement ca fonctionne et ca m'affiche le pdf dans la page mais sinon il veut pas..
18 Janvier 2007 00:02:44

Tu peux rediriger vers une seconde page jsp qui écrit tout le contenu pdf dans le flux de retour.
Le truc, c'est qu'avec une requête ajax, tu ne peux plus changer le header de la page.
D'ailleurs, ajax n'est pas fait pour rempalcer une page entière, mais seulement des fragments de page.

En résumé, tu prépares le pdf en mémoire dans un buffer. Tu mémorises ce buffer dans la session.
Tu te sers de la réponse ajax pour donner l'url de la seconde page jsp et en javascript tu fais naviguer le client vers la seconde jsp qui balance le pdf.
Je fais exactement la même chose en C# lorsque je dois sortir une liste complexe en export pdf ou excel.
18 Janvier 2007 12:38:53

Je suis désolé mais j'ai toujours du mal..
J'ai mis en session mon bufer..
Je le recupere dans la jsp..
Mais comment faire pour afficher le pdf, faut il mettre dans la balise <body>? ou alors il faut juste ecrire le flux et si oui Ou met on le content type : application/pdf?
Dans un fichier java je sais qu'on fait response.setContentType..
Mais pour la jsp je suis encore coincé;
merci pr vos aides encore davance, j'ai pas mal avancé!!
18 Janvier 2007 13:39:56

  1. response.setContentType( "application/pdf" );
  2. response.setHeader("Content-Disposition","attachment; filename=\"document.pdf\"");
  3. response.setHeader("Cache-Control", "no-cache");
  4. ...
18 Janvier 2007 13:59:31

Oki merci mais je t'explique vite fait un truc avant de mettre en oeuvre ce que tu m'a mis:

CODE premiere JSP:
xhr_object.onreadystatechange = function() {
if(xhr_object.readyState == 4) {
location.href='../admin/pdf';
}
}

Ici je renvoie vers le dichier pdf.jsp que voici :

<%
System.out.println("ATTRIb :"+request.getAttribute("flux"));
response.setContentType( "application/pdf" );
response.setHeader("Content-Disposition","attachment; filename=\"document.pdf\"" );
response.setHeader("Cache-Control", "no-cache" );
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
response.setContentLength(byteOut.size());
ServletOutputStream out2 = response.getOutputStream();
byteOut.writeTo(out2);
out2.flush();
%>

Le probleme c'est que ici je n'ai pus moyen d'avoir le contenu du flux mais en session car il ne m'est pas donné DIRECTEMENT par la classe qui fait le traitement. Le flux est contenu dans xhr_object.responseText

Voila la situation.
Je mets en oeuvre et je te tiens o courant
Mici
18 Janvier 2007 16:37:41

G une erreur :

com.ibm.servlet.engine.srt.WriteBeyondContentLengthException
at com.ibm.servlet.engine.srt.BufferedServletOutputStream.write(BufferedServletOutputStream.java:285)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java(Compiled Code))
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java(Compiled Code))
at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:233)
at jsp._pdf_jsp_11._jspService(_pdf_jsp_11.java:110)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:142)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.runtime.JspServlet$JspServletWrapper.service(JspServlet.java:300)
at org.apache.jasper.runtime.JspServlet.serviceJspFile(JspServlet.java:430)
at org.apache.jasper.runtime.JspServlet.service(JspServlet.java:565)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.servlet.engine.webapp.StrictServletInstance.doService(ServletManager.java:827)
at com.ibm.servlet.engine.webapp.StrictLifecycleServlet._service(StrictLifecycleServlet.java:167)
at com.ibm.servlet.engine.webapp.IdleServletState.service(StrictLifecycleServlet.java:297)
at com.ibm.servlet.engine.webapp.StrictLifecycleServlet.service(StrictLifecycleServlet.java:110)
at com.ibm.servlet.engine.webapp.ServletInstance.service(ServletManager.java:472)
at com.ibm.servlet.engine.webapp.ValidServletReferenceState.dispatch(ServletManager.java:1012)
at com.ibm.servlet.engine.webapp.ServletInstanceReference.dispatch(ServletManager.java:913)
at com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:523)
at com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:282)
at com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:112)
at com.ibm.servlet.engine.srt.WebAppInvoker.doForward(WebAppInvoker.java:91)
at com.ibm.servlet.engine.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:184)
at com.ibm.servlet.engine.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:67)
at com.ibm.servlet.engine.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:122)
at com.ibm.servlet.engine.oselistener.OSEListenerDispatcher.service(OSEListener.java:315)
at com.ibm.servlet.engine.http11.HttpConnection.handleRequest(HttpConnection.java:60)

Mais quand je vais via le navigateur sur la jsp, jai le pdf qui se telecharge normalement..
Any idea?
19 Janvier 2007 09:57:24

J'ai trouvé pour cette exception.
Il faut bien coller les 2 balises <%%><%%> sans espaces ni retour chariot!!
j'arrive a telecharger le fichier a la fin. Merci pour tout les Djakar!!
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS