# Java > Dveloppement Web en Java > Servlets/JSP >  [tomcat][stuts]probleme de refresh page jsp

## v1nc3kr0

petit problem de refresh de page jsp
j'explique mon appli

je remplis un formulaire
le controleur de struts recoit les champs du formulaire
si formulaire valide demande a la classe Action de traiter le formulaire
dans cette classe Action, creation de plusieurs threads pour une execution en parallele vu que le traitement est long
dans cette classe Action, ou plutot dans une des classe de travail, j'ai un boolean isTerminate qui m'informe si tout les threads sont termines.
la classe Action retourne le resultat sans attendre la fin des threads
dans la page jsp de resultat j'ai indique


```

```

pour que la page se rafraichisse toute les 5 secondes
mais le probleme est que lorsque la page se rafraichit pour la 1ere fois, le controleur me renvoit la page d'erreur m'indiquant que "le formulaire n'est pas saisi correctement". Apparemment lors du refresh de la page il renvoi le formulaire ...

que faire pour que lors du refresh il ne renvoit pas le formulaire, ou comment faire en struts pour que lors d'un traitement qui prend du temps il m affiche une page d'attente ou une page qui se refresh ???

merci d'avance pour les indiques

v1nc3kr0

----------


## v1nc3kr0

bon pas trop de reponse pour le moment   ::?:  
je vais reformuler mon probleme
les classe de travail de mon application web prenne du temps a finir l'execution (vu que c'est un scan a faire du reseau)
donc apres validation du formulaire, il y a un certain temps d 'attente
et le probleme est que lorsque la page main de mon servlet se charge pendant le scan, la page affiche "le serveur ne repond pas"
donc pour resoudre ce probleme, je souhaiterai mettre une interface d'attente en testant la valeur d'un boolean isTerminate.
lorsque ce boolean est  true, l interface d'attente redirige vers une page de resultats places dans la session

donc pour realiser cette interface d'attente j'ai besoin d'aide

----------


## toctof

J'ai galement rencontr un problme de ce genre, et j'ai eu recourt au tag jsp suivant, qui fonctionne trs bien : http://www.servletsuite.com/servlets/waittag.htm

Je pense que tu devrais pouvoir faire quelque chose de pas trop mal adapt avec a. C'est pratique, et a permet de mettre un gif anim d'attente : beucoup plus convivial pour l'utilisateur !

Bon courage  ::wink::  

ToCToF  [/code]

----------


## v1nc3kr0

le probleme est que c'est une servlet java et non une page jsp

voici mon fichier strut-config.xml :


```

```

le formulaire que je valide est le formulaire frmScanner
la servlet controleur recoit la saisie du formulaire frmScanner
si valide, il demande a la servlet main d'executer la methode *execute* de la classe *UtilScanner.FormulaireAction*
ce qui prend du temps c'est l'execution de cette classe qui fait appel  des classes de travail
y a t il un moyen de demander  la vue qui est affichee de se rafraichir pour mettre  jour les informations
si vous voulez j'essaye de trouver le meme procede que le developpement MVC en interface graphique avec SWING ou AWT en demandant  la vue de faire un update()
je vous indique aussi ma classe UtilScanner.FormulaireAction :


```

```

 dans cette classe c'est l'appel  la methode scanner.run() qui prend du temps (jusqu a plusieurs minutes). Ce qui fait que le navigateur de l'utilisateur  un moment pense que le serveur ne repond plus vu qu 'il ne recoit pas de page a afficher
mon souhait serait d'implementer la methode run de la classe Scanner dans un thread, et dans cette methode run demander  la vue de se mettre  jour
et ca je ne sais pas si c est possible en struts

----------


## Pietra

Bonjour,

 mon avis il y a plusieurs solutions

1 - Afficher un message d'attente dans la page que tu valide (formulaire frmScanner). 
Tu peux le faire avec un div contenant un message du genre "Traitement en cours" que tu rends visible au moment de la validation de ton formulaire (methode javascript onsubmit).
Lorsque ta methode execute sera termine la nouvelle page sera affiche.
Reste  corriger le problme de Timeout "le serveur ne repond pas", je pense que c'est ta session qui est expire (tag <session-timeout> dans web.xml) ou bien une configuration du client (le problme peut arriver avec Mozilla).

2 - Utiliser la technologie Ajax pour charger les informations que tu souhaite afficher.
Apres validation du formulaire tu renvoie l'utilisateur vers une page que tu complte au fur et  mesure.
Cependant il te faut dcouper ton traitement en morceaux (en fonction des donnes tu souhaite afficher) et tu ne peux plus mettre ton objet scanner en session (mais l'quivalent des donnes contenues seront retournes sous format XML ou texte)

----------


## v1nc3kr0

merci pour ta reponse Pietra,

j'ai verifier le time out de session est a 30 minutes donc pas de probleme de ce cote
lorsque il s affiche sur le navigateur "le serveur ne repondu plus" je vois dans le manager du serveur tomcat que le navigateur du client renvoit 3 fois la requete lorsqu'il n'a plus de contact avec le serveur ...

pour resoudre ce probleme, le meileur moyen c'est d'avoir un page temporaire en attendant la fin de l'ActionForm du formulaire


```

```

donc je vous remts le scenario :
- saisie du formulaire frmScanner
- le formulaire est envoye a la servlet controleur main qui doit valider la saisie et ensuite demande a l'ActionForm d'executer sa methode "execute"
- envoi de la vue request.do pour afficher les resultats de la requete
entre l'envoi du formulaire et la reception de la vue avec les resultats, il y a un temps assez long.
si ce temps est trop long, le navigateur de l'utilisateur estime que le serveur ne reponds plus.
ce que je pensais faire c'est :
- dans la methode execute utliser mes classes de travail dans un thread
- ouvrir une fenetre popup qui indique "scannge en cours veuillez patienter..." avec le temps d'execution et le nombre de machine scanner
- rafraichir ce popup toute les "t" secondes
- lorsque le scan est terminee rediriger la fenetre principale vers une page de resultats

donc mes questions sont comment 
- demander a la page request.do d'ouvrir un petite fenetre
- comment faire pour que le popup demande a la page qui l'a cree (donc request.do) de se rediriger vers une autre page (ex : response.do)

autre question :

si *HttpServletRequest request*, *request.getSession()* represente bien la session de l'utilisateur. Donc mes classes de travail enregistre les resultats par le biais de *request.getSession().setAttribute()* ???

j espere que les renseignement sont clairs. Et je remercie d avance pour l'aide   ::hola::

----------


## Pietra

en reprenant le conseil de ToCToF et en utilisant la TagLib Wait.



```

```

et si le code execute de ton action form tait repris dans la jsp "heavy_code.jsp" ceci devrait fonctionner ?

En effet il n'est pas possible d'ouvrir une popup depuis le serveur.

De plus il n'est pas possible d'envoyer plusieurs rponses  une seule requete http.

----------


## Pietra

cel dit je persite  croire qu'Ajax pourrait tre une meilleur solution (notament en affichant les donnes au fur et  mesure).

Un lien sur les bluePrints (progress bar et refreshing data)
https://bpcatalog.dev.java.net/nonav/ajax/index.html

----------


## v1nc3kr0

merci encore Pietra pour tes soluces
j'ai trouve enfin une solution adequate a mes envies
donc dans mon fichier struts_config.xml j'ai ajoute *redirect="true"* a la page forward :



```

```

aussi, dans mon actionForm j'utilise mes classes de travail dans un Thread
ce qui fait que mon ActionForm ce termine plus rapidement
ma page est redirige
sur la page request.do je fait un refresh toute les t secondes en utilisant :


```

```

et mes classes de travail enregistrent les resultats dans la session
ce qui fait que dans la ae request.do, je test un boolean *isTerminate*



```

```

voila et les resultats finaux je les affiche dans la page request2.do
voila enfin j'ai trouve une solution pas mal
c etait juste une option *redirect*  true   ::arf::  

merci quant mme Pietra pour les indics et aussi toctof
 ::salut::

----------


## csa09966

bonjour,
j'ai galement un pb de refresh de mes pages jsp, j'espre que vous pourrez m'aider.
En fait je dclare un bean session sur ma page de login.
Des que je passe sur la page de munu utilisateur qui suit, et si je rafraichit la page, j'ai le message :
"La page ne peut pas tre actualise sans le renvoi d'information. Cliquez sur recommencer pour renvoyer les informations ou sur Annuler pour essayer de revenir  la page que vous essayiez de consulter."

Est-ce que vous pourriez me dire comment viter ce message.
Il se produit sur les pages jsp des que j'ai commenc  remplir mon bean session.
merci d'avance

----------


## v1nc3kr0

salut csa09966,
pour t aider, peux tu me renseigner sur ton architecture (struts, serveur d'application) si tu utilises struts mets moi la partie de ton fichier struts-config.xml concernant la page d'identification.

merci

----------


## csa09966

salut, 
je suis sous xp pro et j'utilise ie. 
Je travaille avec Tomcat 5.0.28 et jdk 1.4.2_08.

En fait, j'ai la page de login qui suit :



```

```

et le formulaire que je rempli :


```

```


J'arrive sur ma page de menu utilisateur :


```

```

Si sur cette page de menu, je fais un refresh, j'ai le message dont je te parle.
Alors, apparamment, ce ne serait pas li au jsp, puisque si je supprime mes dclaration jsp et le login.processRequest, ca fait pareil.

a+

----------


## v1nc3kr0

ah mon avis le prob est au niveau de la portee des champs
si ton formulaire a une portee de requete uniquement, si tu rafraichi la page identite tu n'est plus connecte.

est ce que apres la verification de l'indentiter tu mets le login et password dans la session ?
si oui il suffit de teste dans la session si login et password
sinon rediriger vers la page d'identification

j'espere que j'ai bien compris le probleme mais apparemment c'est apres idetification tu n'enregistres ou tu n'as plus de trace des identites

v1nc3kr0

----------


## v1nc3kr0

apparemment la portee des champs login est bien session
pour etre sr que login et password soit dans la session, ajoute apres identification pour la premier fois un session.setAttribut() pour login et password

----------


## csa09966

salut,
j'ai essay et j'ai fait un session.setAttribute(), mais le pb n'est pas rsolu.
Mais mon pb n'est pas du tout une perte de donnes dans ma session.
Je ne perd rien de ce que j'ai mis dans mon bean quand je recharge.
En fait, c'est juste le fait qu'il y ait ce message.
Je fais le login.processRequest() suivi du test sur if(!login.isUserOk()) 
pour viter qu'un utilisateur n'accde a la page sans s'etre identifi.

voila.
Je ne comprends pas pourquoi j'ai ce pb au rafraichissement.
J'ai programm d'autres applis en jsp sous tomcat sans jamais avoir ce truc.

a+

----------


## DanZzz

Salut,

J'ai le mme "problme", exactement le meme message que toi.

Mon code dans le fichier config de struts plutot :



```

```


Une explication de mon cot :

je me log => a dclenche une Action associ au path /send_connexionBean qui prend en compte les donnes du formulaire.
J'arrive sur une page menu, mon url est celle du path associ a l'Action, donc en gros :
http://localhost/MyProject/send_connexionBean.do

L je raffraichi, si jcomprend bien... donc on redemande l'envoie de la page "http://localhost/MyProject/send_connexionBean.do "

et jpense que le message n'est justement pas un problme, il indique juste que cette page menu ncessite 
- le renvoie du Bean formulaire ("formConnexionID" dans mon cas) vu qu'on reappelle l'Action send_connexionBean. Et effectivement, il refait la validation du Bean formulaire avant detre recup dans l'Action
- ou... d'annuler ! lol

Donc le message n'est pas un problme   ::roll::  , c'est plutot une info..

Du coup ya une question que jme pose :
pourquoi une fois que l'Action renvoie le forward vers "succesConnexion" (la page menu), j'ai 
http://localhost/MyProject/send_connexionBean.do (le path de l'Action donc)
au lieu de
http://localhost/MyProject/succesConnexion.do (le path du menu)


(parce que si on avait la 2e URL, on raffraichirait une page qui nous afficherait pas de pop up cette fois ci ! vu que l'on appelle pas l'Action ) ....

----------


## DanZzz

et bien la rponse est sous les yeuses lol



```

```

avec un redirect="true", a m'affiche bien 

http://localhost/MyProject/succesConnexion.do

une fois la mthode execute de l'Action termine.

Et l je peux raffraichir sans voir la pop up   ::wink::

----------


## csa09966

salut  tous,
j'ai enfin trouv ce que c'tait.
Il fallait mettre method=get et non post dans mon formulaire.
Au rechargement, get ne renvoie pas les donnes du formulaire, alors que post oui.

Je vous remercie pour votre aide, les rponses que vous m'avez donnes m'ont permis de comprendre d'ou venait mon pb.
Sans changer avec d'autres dveloppeurs, on n'arrive vraiement  rien

merci encore

a+
cline

----------


## csa09966

rebonjour,
alors je n'en sortirai jamais.
Quand je me sers de method=get, le login et mot de passe apparaissent en clair dans l'url.
Je suis donc oblige de me servir de method=post et donc j'ai toujurs le meme pb.
si qqn a une ide.....
cline

----------


## csa09966

salut,
apparamment, s'aprs mes recherches, le fait qu'on passe le formulaire en post fait que les donnes du formulaire sont renvoyes au rechargement de la page.

Est-ce que quelqu'un sait comment faire pour bloquer l'envoi des donnes du formulaire

merci d'avance

----------


## v1nc3kr0

salut 
comme t as dit DanZzz tu dois mettre dans ton fichier struts-config.xml l'option redirect=true dans ta balise forward
comme ca tu ne sera plus dans ton servlet avec l'ActionForm
dans mon exemple :


```

```

si je ne mets pas redirect dans la balise forward l'url de la reponse sera toujours *http://localhost:8080/mon_appli/main.do*
avec l'option redirect  true l'url de reponse est *http://localhost:8080/mon_appli/request.do*
ce qui fait que si je recharge la page de reponse, avec l'option redirect  true il ne recommence pas l'ActionForm

biensur cette reponse est coorect si tu utilise le framework Struts
sinon sur ta page jsp tu peux faire un redirect avec 


```
response.sendRedirect&#40;"page_forward.jsp"&#41;;
```

bon j espere que ca t aidera

v1nc3kr0

----------

