我正在使用Spring 3 MVC& amp; jQuery的
我不知道怎么问它所以我会试着解释
我有这种情况:
LoginPage(带用户对象模型)---提交 - >服务器将OK发送回LoginPage - > (LoginPage)使用window.location =“Page2”
重定向到Page2
问题:第2页无法识别用户
如何让它发挥作用?我试过阅读@SessionAttributes
,但并不是真的理解它。
@Controller
public class LoginController {
...
...
@RequestMapping(value = "/")
public ModelAndView loginPage(ModelMap model) {
model.addAttribute("user", new User());
logger.info("Loading Login Page");
return new ModelAndView("login");
}
@RequestMapping(value = "/loginSubmit.html" ,method=RequestMethod.GET)
public String processSubmit( ModelMap model, User user) throws InterruptedException{
...
...
return "1" to login page
...
...
在这里,我希望从最后一个控制器中知道用户用户,但它正在改为新用户。
@Controller
public class Controller2 {
@RequestMapping(value = "/home")
public String home(ModelMap model, User user) {
...
...
}
LoginPage.jsp
$.get("loginSubmit.html", form1Var.serialize(), function(data){
var isSucess = data.charAt(0) == "1" ? true : false;
if ( isSucess == true) {
alert("ok...");
window.location = "home";
}
编辑将我的解决方案移至答案。
答案 0 :(得分:1)
默认情况下,Spring MMVC中的服务器端是无状态的。要在请求之间保存状态,必须将要保存的数据放在会话中。然后,该数据可用于同一会话中的每个请求(即来自同一客户端)。
在您找到的解决方案中,@ SessionAttributes(“user”)注释告诉Spring MVC,您希望通过将用户对象保存在会话中来保留用户对象。这就是Spring如何从实际维护状态的所有工作中抽象出来的。
答案 1 :(得分:1)
我的解决方案:
@SessionAttributes("user")
两个控制器上的
和
@ModelAttribute("user") User user
作为方法中的参数 - 工作
我也加了
@ExceptionHandler(HttpSessionRequiredException.class)
public String SessionException(HttpSessionRequiredException ex) {
logger.info(ex.getMessage());
return "redirect:LogIn";
}
捕获异常,用户将转到LoginPage而不是异常错误页面
正如Donal Boyle指出的那样,结论是:使用@SessionAttributes
在控制器之间共享模型