LoginFormController - >在提交/发布表单后调用Post。最后,它调用另一个名为LandingFormController的Controller - > loadForm。
好吧,在loadForm中,Model中的值似乎是空的。有没有办法可以在会话中持久保存Bean或请求并在loadForm方法中获取它?奖励积分:如果你能指出一些文件可以参考:)
由于
@Controller
@RequestMapping(value="/login")
public class LoginFormController {
@RequestMapping(method=RequestMethod.POST)
public ModelAndView post(@ModelAttribute User user, BindingResult result, SessionStatus status) {
logger.info("post");
new ReceiptUserValidator().validate(user, result);
if (result.hasErrors()) {
return new ModelAndView("login");
}
else {
logger.info("Email Id: " + user.getEmailId());
//status.setComplete();
Map<String, Object> model = new HashMap<String, Object>();
model.put("userId", user.getEmailId());
model.put("now", new Date().toString());
return new ModelAndView("redirect:/landing.htm", "model", model);
}
}
下面的控制器B被称为
@Controller
@RequestMapping(value="/landing")
public class LandingFormController {
protected final Log logger = LogFactory.getLog(getClass());
@RequestMapping(method=RequestMethod.GET)
public String loadForm(Model model) {
logger.info("LandingFormController loadForm: " + model.asMap().keySet());
return "landing";
}
}
答案 0 :(得分:1)
代码正在执行重定向,导致放置在模型中的属性丢失。使用flash属性将属性传递给下一个控制器。
Flash属性为一个请求存储属性提供了一种方法 打算用于另一个。这是最常见的 重定向 - 例如,发布/重定向/获取模式。闪 属性在重定向之前临时保存(通常在 会话)在重定向后可用于请求 立即删除。
<强> LoginFormController 强>
@Controller
@RequestMapping(value="/login")
public class LoginFormController {
@RequestMapping(method=RequestMethod.POST)
public ModelAndView post(@ModelAttribute User user, BindingResult result,
SessionStatus status, final RedirectAttributes redirectAttrs) {
logger.info("post");
new ReceiptUserValidator().validate(user, result);
if (result.hasErrors()) {
return new ModelAndView("login");
}
else {
logger.info("Email Id: " + user.getEmailId());
//status.setComplete();
redirectAttrs.addFlashAttribute("userId", user.getEmailId());
redirectAttrs.addFlashAttribute("now", new Date().toString());
return new ModelAndView("redirect:/landing.htm", "model", model);
}
}
作为替代解决方案,您无法从控制器执行重定向。
附加检索解决方案。
修改loadForm
public String loadForm(@ModelAttribute("user") User user) {
logger.info("LandingFormController loadForm: " + user.getEmailId());
return "landing";
}