1

如何在不使用 jsp 端的输入字段的情况下将对象从 get 控制器传输到 post 控制器?

@RequestMapping(value = "/benutzerverwaltung/{benutzerID}/kennwort", method = RequestMethod.GET)
public String BenutzerverwaltungKennwort(@PathVariable("benutzerID")int id, @ModelAttribute("benutzer") CBenutzer benutzer, Model model){
    benutzer.getBenutzer(id);
    benutzer.setPasswort(null);
    //code to transmit?
    return "benutzerverwaltung/kennwort";
}

第二个控制器应该得到对象 benutzer

@RequestMapping(value = "/benutzerverwaltung/{benutzerID}/kennwort/aendern", method = RequestMethod.POST)
public String BenutzerverwaltungKennwortGo(@PathVariable("benutzerID")int id, @ModelAttribute("benutzer") CBenutzer benutzer, Model model){
    //here I need the object with its attributes from the controller above...
    System.out.println(benutzer.toString()); //what i get is attributes = null -.-
    return "redirect:/benutzerverwaltung/";
}

有人有想法吗?谢谢阅读

4

1 回答 1

1

您需要使用HttpSession属性或闪存属性(HttpSession无论如何都使用)。为了使用 flash 属性,Spring 使RedirectAttributes该类可用。在您的 GET 处理程序中

@RequestMapping(value = "/benutzerverwaltung/{benutzerID}/kennwort", method = RequestMethod.GET)
public String BenutzerverwaltungKennwort(@PathVariable("benutzerID")int id, @ModelAttribute("benutzer") CBenutzer benutzer, Model model, RedirectAttributes redirectAttrs){
    benutzer.getBenutzer(id);
    benutzer.setPasswort(null);
    redirectAttrs.addFlashAttribute("benutzer", benutzer);
    return "benutzerverwaltung/kennwort";
}

从javadoc:

重定向后,Flash 属性会自动添加到为目标 URL 提供服务的控制器的模型中。

即使您没有执行重定向,这也是正确的,即。在下一个请求中。

请注意,这些 flash 属性仅在您发出的下一个请求中可用(flash!)。如果您不确定下一个请求是否是您需要的 POST,您应该将对象直接保存在HttpSession.

于 2013-09-04T12:30:10.640 回答