2009-10-29 7 views
5

Używam Spring Web MVC i Hibernate do rozwijania mojej aplikacji.Zwróć ten sam kontroler widoku przy użyciu ModelAndView z Spring Web MVC

Moja strona login.jsp został podany kod:

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

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

Teraz mój plik servlet.xml został następujący kod:

<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> 

Moja UserValidateFormController został następujący kod:

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; 

    } 

W moim UserValidateFormController w momencie przekazania zdarzenia submit sprawdzam nazwę użytkownika i hasło d są poprawne lub nie ..

Działa dobrze &, jeśli oba pasują do siebie, a następnie przekierowanie do layout.jsp, to również dobrze.

Ale jeżeli nazwa użytkownika lub hasło są błędne chcę przekierować do tej samej strony login.jsp i wyświetli odpowiedni błąd ..

Proszę mi zaproponować rozwiązanie, które co zrobić przekierowanie do samego kontrolera widoku ..

góry dzięki ..

+0

... jeśli nie masz nic przeciwko pytaniu, czy masz problemy z używaniem Springa, czy jest jakiś szczególny powód, dla którego przenosisz swój własny środek bezpieczeństwa, zamiast implementować Acegi (lub Sprint Security, jak się nazywa teraz) ? – vector

+1

Ya, użyłem ACEGI i bardzo dobrze o tym wiem ... Ale mój obecny system nie wymaga tak dużego obciążenia .. To pytanie jest tylko podstawowymi koncepcjami wiosennymi, w jaki sposób mogę przekierować na tę samą stronę JSP zwaną JSP , kontroler .. – Nirmal

+0

... wystarczająco dobry. – vector

Odpowiedz

13

końcu rozwiązać ten problem w następujący wiersz kodu:

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

lub

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

Dzięki ...

0

... nie wiem, czy to jest to, czego szukasz, ale jest to w jaki sposób rozwiązać problem:

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

... inaczej przegapiłem coś w twoim pytaniu. Wydaje mi się, że jesteś dość daleko, żeby utknąć w ten sposób.

+0

Nie mogę tego zrobić, ponieważ moja strona logowania wymaga, aby Użytkownik był inicjowany ... Więc będzie miał kłopoty i da mi błąd, że nie może znaleźć polecenia użytkownika z login.jsp .. – Nirmal

+0

... następnie co z: Zwróć nowy ModelAndView (nowy RedirectView (getFormView()), model); – vector

0

Powiedziałbym, wszystko co musisz zrobić, to wypełnić swój model przed ponownym użyciem:

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

Jeśli masz InternalResourceViewResolver skonfigurowany, można zrobić to tak:

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

Moim zdaniem, jest to bardziej przejrzyste.

Powiązane problemy