我想传递一个id参数从一个表单(控制器)到另一个。这里我添加一个id到我的模型,它被传递。
@Controller
public class PersonController
@RequestMapping(value = {"/addPerson"}, method = RequestMethod.POST)
public String savePerson(Model model, //
@ModelAttribute("personForm") PersonForm personForm, RedirectAttributes attributes) {//, @ModelAttribute("person") Person newPerson) {
String firstName = personForm.getFirstName();
String lastName = personForm.getLastName();
double money = personForm.getMoney();
if (firstName != null && firstName.length() > 0
&& lastName != null && lastName.length() > 0) {
Person newPerson = new Person(firstName, lastName, money);
personService.save(newPerson);
attributes.addFlashAttribute("id", newPerson.getId());//
return "redirect:/addKonto";
}
model.addAttribute("errorMessage", errorMessage);
return "addPerson";
}
我正在传递数据到另一个形式,这里的id被正确地传递。 当我试图进一步传递模型时,id参数丢失了。Size = 2 如何获得id参数?@RequestMapping(value = {"/addKonto"}, method = RequestMethod.GET)
public String showAddKontoPage(Model model, @ModelAttribute("id") int id) {
KontoForm kontoForm = new KontoForm();
model.addAttribute("kontoForm", kontoForm);
model.addAttribute("id", id);
return "addKonto";
}
@RequestMapping(value = {"/addKonto"}, method = RequestMethod.POST)
public String saveKonto(Model model,
@ModelAttribute("kontoForm") KontoForm kontoForm) {
String kontoName = kontoForm.getKontoName();
double moneyInKonto = kontoForm.getMoneyInKonto();
model.getAttribute("id"); // hier is null
if (kontoName != null && kontoName.length() > 0) {
Konto newKonto = new Konto(kontoName, moneyInKonto);
kontoService.save(newKonto);
return "redirect:/personList";
}
在您的savePerson
方法中,您添加了attributes.addFlashAttribute()
而不是model.addAttribute()
,就像您在showAddKontoPage
方法中一样。
意思是,对于通过重定向从一个控制器传递到另一个控制器的属性,您需要通过model.addAttribute()
方法添加该属性。
你可以在你的Controller方法中添加一个新属性来接受user id属性:
@RequestMapping(value = {"/addKonto"}, method = RequestMethod.GET)
public String showAddKontoPage(Model model,
@RequestParam(required = false) String id)
@RequestMapping(value = {"/addKonto"}, method = RequestMethod.POST)
public String saveKonto(Model model,
@ModelAttribute("kontoForm") KontoForm kontoForm,
@RequestParam(required = false) String id)
Flash消息用于通过标签向最终用户显示消息。
边注:
Spring有验证表单的基础设施。当然,当你准备好了的时候,将来使用这个基础设施会好得多。