2009-10-29 30 views
5

Estoy utilizando Spring Web MVC e Hibernate para desarrollar mi aplicación.Devolver el mismo controlador de vista utilizando ModelAndView de Spring Web MVC

Mi página login.jsp ha siguiente código:

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

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

Ahora, Mi archivo servlet.xml ha siguiente código:

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

Mi UserValidateFormController ha siguiente código:

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; 

    } 

En mi UserValidateFormController en el momento de entregar el evento submit, estoy verificando ese nombre de usuario y passwor d son correctas o no ..

Funciona bien & si ambos coinciden, entonces está redirigiendo a layout.jsp, eso también está bien.

Pero si nombre de usuario o contraseña son incorrectos entonces yo quiero redireccionar a la página login.jsp misma y mostrar error apropiado ..

Por favor, me sugieren la solución que lo que hay que hacer volver a dirigir a mismo controlador de vista ..

Gracias de antemano ..

+0

... si no le importa preguntar, si se ha tomado la molestia de usar Spring, ¿hay alguna razón particular por la que está aplicando su propia medida de seguridad en lugar de implementar Acegi (o Sprint Security como se llama ahora) ? – vector

+1

Ya, he usado ACEGI y lo conozco muy bien ... Pero mi sistema actual no requiere mucha carga ... Esta pregunta es solo acerca de los conceptos básicos de primavera que me permiten redirigir a la misma página llamada JSP. , controlador ... – Nirmal

+0

... bastante justo. – vector

Respuesta

13

Finalmente resolver este problema con línea de código siguiente:

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

o

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

Gracias ...

0

... no estoy seguro si esto es lo que estás buscando, pero es así como puedo solucionar su problema:

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

... de lo contrario me perdí algo en su pregunta. Me parece que estás bastante lejos para atascarte así.

+0

No puedo hacer eso, ya que mi página de inicio de sesión requiere que el usuario se inicialice ... Por lo tanto, tendrá problemas y me dará un error al no encontrar el comando de usuario de login.jsp .. – Nirmal

+0

... entonces qué tal: devolver new ModelAndView (new RedirectView (getFormView()), modelo); – vector

0

Yo diría que todo lo que tiene que hacer es llenar su modelo antes de volver a utilizarlo:

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 usted tiene una InternalResourceViewResolver configurado, puede hacerlo de esta manera:

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

En mi opinión, esto es más claro.

Cuestiones relacionadas