2009-06-26 7 views
4

J'ai hérité d'un site Web Java qui utilise Struts 1. Actuellement, si le bouton de retour des brosers est enfoncé à mi-chemin d'un voyage, ils obtiennent une erreur "La page Web a expiré". D'après ma compréhension limitée, cela semble être une faille dans la conception de Struts - chaque page est une forme. Y at-il de toute façon pour contourner le problème, ou serait le seul moyen de migrer vers une autre structure MVC (struts2, springMVC)?Struts 1 pas convivial avec le bouton de retour du navigateur: des solutions?

Répondre

1

Je ne pense pas qu'il y ait quelque chose d'inhérent dans les entretoises qui fait cela. Il semble que le développeur précédent ait essayé de créer une sorte d'assistant. La bonne façon de le faire, serait de stocker les résultats en attente dans l'assistant dans une session, et faire une redirection complète après chaque soumission de formulaire.

+0

Oui, c'est comme un assistant, une série de pages 1-> 2-> 3-> 4-> 5-> 6 Cependant la page 2 repose sur les données du formulaire 1. Que voulez-vous dire par 'un redirection complète après chaque soumission de formulaire »? – Amoeba

+0

Dans la plupart des frameworks MVC, à la suite d'une action, vous pouviez soit renvoyer vers une autre action, soit faire une redirection. Une redirection signifie que le serveur demande au navigateur d'aller physiquement à une autre page. C'est ce que l'on appelle couramment le modèle POST-REDIRECT-GET (http://en.wikipedia.org/wiki/Post/Redirect/Get). Pour plus d'informations à ce sujet, voir ceci: http://stackoverflow.com/questions/614516/why-use-redirecttrue-in-struts-1-forward Je pense que cela aidera à éclaircir certaines choses. – blockhead

8

Ce n'est pas un problème de Struts, vraiment. Apparemment, le gars qui a construit ce ne croyait pas dans le modèle Post/Redirect/Get, et sert à la place une page directement en réponse à une soumission de formulaire.

Vous pouvez modifier ce comportement en appliquant redirect="true" à vos attaquants d'action:

<action ... > 
    <forward name="success" 
     contextRelative="true" 
     path="/moduleB/index.do" 
     redirect="true"/> 
</action> 

Voir la Struts user guide pour plus d'informations.