Возврат того же контроллера представления, используя ModelAndView Spring Web MVC - PullRequest
6 голосов
/ 29 октября 2009

Я использую 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 во время передачи события отправки я проверяю правильность имени пользователя и пароля.

Работает нормально, и если оба они совпадают, его перенаправление на layout.jsp тоже нормально.

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

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

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

Ответы [ 4 ]

13 голосов
/ 09 июня 2010

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

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

или

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

Спасибо ...

2 голосов
/ 20 декабря 2011

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

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

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

0 голосов
/ 02 июня 2010

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

    if (userChecking.size() == 1) {
        return new ModelAndView("layout");
        //return new ModelAndView(new RedirectView(getSuccessView()));
    }
    model.put("User", command);
    return new ModelAndView("login", model);
0 голосов
/ 30 октября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...