@ModelAttribute形成的模型不能在另一个Controller中使用

时间:2011-12-27 13:32:26

标签: spring-mvc spring-annotations modelattribute

我的UserController.java

@Controller
@RequestMapping("/userRegistration")
public class UserController{

    @RequestMapping(method = RequestMethod.GET)
    public String showForm(ModelMap model) {
        User user = new User();
        model.addAttribute(user);
        return "userForm";
    }

@RequestMapping(method = RequestMethod.POST)
public String onFormSubmit(@ModelAttribute("user") User user) {   // **#1**
    return "redirect:userSuccess.htm";                // **#2**
    }

}

我的SuccessController.java

@Controller
public class SuccessController {

    @RequestMapping("/userSuccess.htm")
    public String getSuccessPage(@ModelAttribute("user") User user){       // **#3**
        return "userSuccess";
    }
}

我未在"user"中获得SuccessController模型,所以当我在${user.name}中使用userSuccess.jsp时,我没有任何价值。

当我在第1行设置用户模型时,为什么不在另一个控制器中获取此值?如果我使用@SessionAttributes将此模型保存在Session中,我可以在另一个控制器中访问它。

那么使用@ModelAttribute形成的模型的范围是什么?

1 个答案:

答案 0 :(得分:3)

它在请求中,除非使用@SessionAttributes described here进行修改。 (Delta其他情况described here。)您正在进行重定向 - 请求属性丢失;这是一个新的要求。

您在文中回答了自己的问题:当您将其保持在会话中时,它可以跨控制器和重定向使用,因为它在会话中。如果你没有把它保持在会话中,那就不是。