Spring redirectAttributes not transferred



我想传递一个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被正确地传递。

@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";
}

当我试图进一步传递模型时,id参数丢失了。Size = 2

@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";
}

如何获得id参数?

在您的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有验证表单的基础设施。当然,当你准备好了的时候,将来使用这个基础设施会好得多。

相关内容

  • 没有找到相关文章

最新更新