У меня есть класс контроллера со следующим методом сопоставления запросов. Метод
spring RequestMapping не работает без ModelAttribute
- AppStart() отвечает за перенаправление пользователя login.html и выход из системы() отвечает за сеанс недействительности и перенаправление пользователя обратно Login.jsp
- если удалить @ModelAttribute из их параметр, то эти два метода бросают исключение, есть ли какой-либо взлом, чтобы эти методы работали без атрибута modelattribute?
методы управления.
@RequestMapping(value="/",method=RequestMethod.GET)
public String appStart(@ModelAttribute("tempAdmin") Admin tempAdmin) {
return "login.jsp";
}
@RequestMapping(method = RequestMethod.POST,name="doLogin")
public ModelAndView doLogin(@ModelAttribute("tempAdmin") Admin tempAdmin, HttpServletRequest request) {
ModelAndView mvc = new ModelAndView();
/*
Buisness logic
*/
mvc.setViewName("home.jsp");
return mvc;
}
@RequestMapping("doLogout")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if(session != null){
session.invalidate();
}
return "login.jsp";
}
login.jsp
<form:form action="doLogin" modelAttribute="tempAdmin" cssClass="form-horizontal">
<div class="form-group">
<label for="username" class="col-sm-2 control-label">Username</label>
<div class="col-sm-10">
<form:input cssClass="form-control" path="adminId" placeholder="username" />
</div>
</div>
<div class="form-group">
<label for="passwd" class="col-sm-2 control-label">Password</label>
<div class="col-sm-10">
<form:password path="password" cssClass="form-control" id="passwd" placeholder="password" />
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Sign in</button>
</div>
</div>
</form:form>
StackTrace.
Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'tempAdmin' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
В модели должен быть объект с именем 'tempAdmin', при использовании' @ ModelAttribute', который выполняется автоматически, иначе вы будете делать это вручную. Так что это не хак, это в основном то, как он должен работать. –
return ModelAndView из других двух методов, то есть 'appStart и logOut' с недавно созданным tempAdmin как modelAttribute – bsingh
@ M.Deinum Но appStart() предназначен для обработки контекстного корня, и я не отправляю никаких данных с запросом и не добавляю их в ответ , Кстати, он отлично работает с простыми тегами HTML-формы. – piechuckerr