实际上,我已经通过谷歌搜索了解如何在Spring MVC
中从一个controller
传递数据到另一个controller
,并发现使用flash attributes
可以完成此任务。它包括声明一个带有RequestMapping=GET
的控制器和另一个带有RequestMapping=POST
的控制器。我已在我的控制器中测试了这段代码,并且它有效。
@RequestMapping(value ="/ajouter", method = RequestMethod.POST)
public String add(@ModelAttribute User user,final RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("user", user);
return "redirect:/account";
}
还有另一个:
@RequestMapping(value ="/account", method = RequestMethod.GET)
public String addAccount(@ModelAttribute("user") User user,@ModelAttribute Account account) {
System.out.println(user.getId());
return "account";
}
但我还有另一个案例:我有两个JSP
页面:
第一个页面将用户添加到数据库。我想要恢复刚插入的用户的ID,将其设置为帐户的外键(在提交添加用户页面后,会出现第二个添加帐户的页面)。
我已经测试过以下代码:
这个控制器将把一个用户插入到数据库中,并恢复刚插入的用户。
@RequestMapping(value ="/addUser", method = RequestMethod.POST)
public String add(@ModelAttribute User user,final RedirectAttributes redirectAttributes) {
this.userService.insertData(user);
redirectAttributes.addFlashAttribute("user", user);
return "redirect:/account";
}
这个控制器将在数据库中插入一个账户,但无法恢复刚刚插入的用户ID。
@RequestMapping(value= "/ajouterCompte", method = RequestMethod.POST)
public String addCompte(@ModelAttribute("account") Account compte,@ModelAttribute("user") User user){
System.out.println(user.getId()); //this code shows 0
System.out.println(compte.getPwd());
String hashPassword = passwordEncoder.encode(compte.getPwd());
System.out.println(hashPassword);
compte.setPwd(hashPassword);
compte.setId(user.getId());
this.compteService.insertCompte(compte);
return "redirect:/users";
}
我猜问题在于这两个控制器都使用了
method = RequestMethod.POST
方法声明,而应该有一个是GET
方法,另一个是POST
方法。但是这种情况下,我该如何获取用户的ID并将其插入到数据库中呢?
当我使用GET
方法声明第二个控制器时,数据库插入失败!
请帮忙解决这个问题 :(