Верните тот же контроллер представления, используя ModelAndView Spring Web MVC

StackOverflow https://stackoverflow.com/questions/1642784

  •  10-07-2019
  •  | 
  •  

Вопрос

Я использую Spring Web MVC и Hibernate для разработки своего приложения.

Моя страница login.jsp имеет следующий код:

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

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

Теперь мой файл servlet.xml имеет следующий код:

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

Мой UserValidateFormController имеет следующий код:

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;

    }

В моем UserValidateFormController во время отправки события я проверяю правильность имени пользователя и пароля.

Он работает нормально, и если оба совпадают, то происходит перенаправление на макет.jsp, это тоже нормально.

Но если имя пользователя или пароль неверны, я хочу перенаправить на ту же страницу login.jsp и отобразить соответствующую ошибку.

Пожалуйста, предложите мне решение, что делать, перенаправляя на тот же контроллер представления.

Заранее спасибо..

Это было полезно?

Решение

Наконец, решите эту проблему с помощью следующей строки кода:

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

или

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

Спасибо...

Другие советы

Если у вас есть InternalResourceViewResolver настроен, вы можете сделать это следующим образом:

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

На мой взгляд, это понятнее.

Я бы сказал, что все, что вам нужно сделать, это заполнить модель, прежде чем использовать ее снова:

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

... не уверен, что это то, что вы ищете, но вот как я решу вашу проблему:

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

... иначе я что-то пропустил в твоем вопросе. Мне кажется, вы довольно далеко, чтобы застрять так.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top