实际上,我已经用Google搜索了解如何在controller
中将数据从一个Spring MVC
传递到另一个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
但我有另一个案例:我有两个 @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";
}
并且此控制器会将一个帐户插入数据库,但无法恢复刚刚插入的用户的用户ID。
method = RequestMethod.POST
我想问题是2个控制器是使用方法GET
声明的,它应该是一个POST
和另一个GET
。但在这种情况下,我如何恢复用户的id以便将其插入数据库?
当我用SELECT distinct mycall, sm, mm, SUM(IF(sm != '', 1,0)) AS 'a_lake',
SUM(IF(mm != '', 1,0)) AS 'w_lake'
FROM ss_log
WHERE conf = '1'
GROUP BY `mycall`
ORDER BY `ss_log`.`mycall` DESC
声明第二个控制器时,插入数据库失败了!
需要你的帮助:(
答案 0 :(得分:2)
设置为flash属性的对象仅在设置了第一个请求后才可用。 (正如the reference guide中所述)。
假设在您的帐户控制器中,您有一个基于GET的/account
方法,用Account
预先填充该信息。
public String account(@ModelAttribute("user") User user, Model model) {
Account account = new Account();
account.setId(user.getId());
model.addAttribute("account", account);
return "account";
}
现在,您可以使用@SessionAttribute("account")
注释您的控制器,以便在请求之间存储会话中的Account
。如果是这样,那么您必须修改POST处理方法以包含SessionStatus
对象并在其上存储调用setComplete()
之后。
public String addCompte(@ModelAttribute("account") Account compete, SessionStatus sessionStatus){
...
sessionStatus.setComplete();
return "redirect:/users";
}
或者将预先填写的信息存储在隐藏的表单字段中,以便它与下面的请求一起传递,并且可以重建Account
。
<form:hidden path="id" />