2009-10-29 6 views
5

J'utilise Spring Web MVC et Hibernate pour développer mon application.Retour contrôleur même vue en utilisant ModelAndView de Spring Web MVC

Ma page login.jsp a code suivant:

<form:form method="post" commandName="User"> 
    User Name : 
     <form:input path="email"/> 
    Password : 
    <form:input path="password"/> 

<input type="submit" align="center" value="Execute"> 

Maintenant, mon fichier servlet.xml a le code suivant:

<bean name="/uservalidate.htm" class="com.sufalam.mailserver.presentation.web.UserValidateFormController"> 
     <property name="sessionForm" value="true"/> 
     <property name="commandName" value="User"/> 
     <property name="commandClass" value="com.sufalam.mailserver.bean.User"/> 
     <property name="formView" value="login"/> 
     <property name="successView" value="layout.jsp"/> 
     <property name="userSecurityProcessor" ref="IUserSecurityProcessor"/> 
    </bean> 

Mon UserValidateFormController a le code suivant:

public class UserValidateFormController extends SimpleFormController { 

    /** Logger for this class and subclasses */ 
    protected final Log logger = LogFactory.getLog(getClass()); 
    private IUserSecurityProcessor userSecurityProcessor; 

    public ModelAndView onSubmit(Object command) 
      throws ServletException, SufalamException { 
      ModelAndView mav = new ModelAndView(); 
      Map model = new HashMap(); 


     String username = ((User) command).getEmail(); 
     String password = ((User) command).getPassword(); 
     List userChecking = new ArrayList(); 
     userChecking = userSecurityProcessor.findByAll(username, password, 0.0); 
     System.out.println("userChecking length = "+userChecking.size()); 
     if (userChecking.size() == 1) { 
      return new ModelAndView("layout"); 
      //return new ModelAndView(new RedirectView(getSuccessView())); 
     } 

     return new ModelAndView("login", model); 

    } 

    protected Object formBackingObject(HttpServletRequest request) throws ServletException { 
     User user = new User(); 
     return user; 
    } 

    public void setUserSecurityProcessor(IUserSecurityProcessor userSecurityProcessor) { 
     this.userSecurityProcessor = userSecurityProcessor; 

    } 

Dans mon UserValidateFormController au moment de la transmission de l'événement de soumission, je vérifie ce nom d'utilisateur et le mot de passe d sont corrects ou non ..

Cela fonctionne bien & si les deux correspondent, puis sa redirection vers layout.jsp, c'est aussi bien.

Mais si le nom d'utilisateur ou mot de passe sont incorrects alors je veux rediriger vers une même page login.jsp et afficher une erreur appropriée ..

S'il vous plaît me suggérer la solution que ce qu'il faut faire rediriger vers le contrôleur même vue ..

Merci à l'avance ..

+0

... si cela ne vous dérange pas de demander, si vous avez pris la peine d'utiliser Spring, y a-t-il une raison particulière pour laquelle vous lancez votre propre mesure de sécurité au lieu d'utiliser Acegi (ou Sprint Security à présent) ? – vector

+1

Ya, j'ai utilisé ACEGI et très bien connu à ce sujet ... Mais, mon système actuel ne nécessite pas beaucoup de charge .. Cette question est juste des concepts de base de printemps que comment puis-je rediriger vers la même page JSP appelé , contrôleur .. – Nirmal

+0

... assez juste. – vector

Répondre

13

enfin résoudre ce problème avec la ligne de code suivante:

return new ModelAndView(new RedirectView(getSuccessView())); 

ou

return new ModelAndView(new RedirectView("success.htm"); 

Merci ...

0

... pas sûr si cela est ce que vous cherchez, mais est-ce que je résoudre votre problème:

else { return new ModelAndView("login", model); } 

... sinon j'ai raté quelque chose dans votre question. Il me semble que tu es assez loin pour rester coincé comme ça.

+0

Je ne peux pas le faire, comme ma page de connexion nécessite l'utilisateur à initialiser ... Donc, il sera en difficulté et me donner une erreur de ne peut pas trouver la commande utilisateur de login.jsp .. – Nirmal

+0

... alors qu'en est-il: return new ModelAndView (new RedirectView (getFormView()), modèle); – vector

0

Je dirais tout ce que vous avez à faire est de remplir votre modèle avant de l'utiliser à nouveau:

if (userChecking.size() == 1) { 
     return new ModelAndView("layout"); 
     //return new ModelAndView(new RedirectView(getSuccessView())); 
    } 
    model.put("User", command); 
    return new ModelAndView("login", model); 
2

Si vous avez un InternalResourceViewResolver configuré, vous pouvez le faire comme ceci:

return new ModelAndView("redirect:success.htm"); 

À mon avis, cela est plus claire.