Верните тот же контроллер представления, используя ModelAndView Spring Web MVC
-
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 ); }
... иначе я что-то пропустил в твоем вопросе. Мне кажется, вы довольно далеко, чтобы застрять так.