2010-07-11 3 views
0

J'essaye de finaliser un processus d'inscription pour ma webapp, mais je suis confondu avec le forwarding/redirections de servlet (encore). Le flux ressemble à ceci:Utilisation de forward()/redirect() pour un processus d'inscription?

// /signup/index.jsp 
<form action='/user/signup'> 
</form> 
<% 
if (request.getAttribute("msg") != null) { 
    %><div><%= request.getAttribute("msg") %><% 
} 
%> 

// Servlet which maps to '/user/signup': 
public void doPost(..) { 
    // process signup params.. 

    // I want to show the user /signup/index.jsp again after completion: 
    req.setAttribute("msg", "signup worked!"); 
    req.getRequestDispatcher("/signup/index.jsp").forward(req, resp); 
} 

lorsque j'utilise la méthode forward(), le navigateur affiche l'URL de l'action post encore:

/user/signup 

mais le contenu est de:

/signup/index.jsp 

c'est ce que forward() est censé faire. Je ne suis pas sûr si cela est déroutant à l'utilisateur si - l'URL est différente de la page qui a réellement généré le contenu.

je suis entré dans ce que Twitter ne, regarde comme ils sont foward() uant l'utilisateur autour de:

// twitter.com/signup 
if (ok) { 
    forward("/find_sources/suggestions"); 
    if (ok) { 
     forward("/find_sources/contacts"); 
     if (ok) { 
      forward("/find_sources/anyone"); 
      if (ok) { 
       forward("/"); 
      } 
     } 
    } 
else { 
    forward("/signup"); // error msg displayed here etc 
} 

Dans ce qui précède, si vous vous trompez sur la page d'inscription initiale, votre navigateur affiche le/compte/create url, mais le contenu de la page ressemble à/signup - donc je suppose qu'ils font la même chose que moi (je suppose que les options forward()/redirect() sous-jacentes sont les mêmes pour tous les serveurs http, pas spécifique à jsp).

Mon flux est-il normal alors? Devrais-je le faire d'une autre manière? Je suppose que les options sont:

  1. Utilisez forward() et acceptez que l'URL soit de l'URL d'action.
  2. Utilisez redirect() et stockez les messages que je veux montrer à l'utilisateur dans une session.

Merci

Répondre

1

Si vous souhaitez faire ce que Twitter fait - faire toute la validation en ligne - à savoir les erreurs de validation d'affichage avec AJAX. Ensuite, les utilisateurs ne cliqueront sur "register" que s'ils ont tout complété correctement et le fait que forward soit utilisé ne posera pas vraiment de problème. Cependant, dans le cas général, essayez de trouver un cadre de conversation (comme spring web flow), ou quelque chose de similaire à @ViewScope de JSF - c'est-à-dire quelque chose entre la requête et la session pour accommoder ce cas d'utilisation.

Une autre option consiste à utiliser la redirection et à effacer le contenu de la session qui vient d'être défini.

Questions connexes