我有一个类似这样的数据模型:
public class Report {
// report owner
private User user;
... typical getter setter ...
}
public class User {
... omitted for clarity
}
当创建报告时,当前用户被设置为报告用户对象。编辑报告时,处理POST请求的spring控制器正在接收用户对象为null的报告。这是我的控制器的样子:
@Controller
@RequestMapping("/report")
public class ReportController {
@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
public String editReport(@PathVariable Long id, Model model) {
Report r = backend.getReport(id); // fully loads object
model.addAttribute("report", report);
return "report/edit";
}
@RequestMapping(value = "/edit/{id}", method = RequestMethod.POST)
public String process(@ModelAttribute("report") Report r) {
backend.save(r);
return "redirect:/report/show" + r.getId();
}
}
我运行抛出调试器,看起来在editReport方法中,模型对象存储完全加载的报表对象(我可以在报表中看到用户)。在jsp表单上,我可以执行以下操作:
${report.user.username}
并呈现正确的结果。但是,当我在process方法中查看调试器时,传入的Report r有一个null用户。我不需要做任何特殊的数据绑定来确保我保留信息吗?
答案 0 :(得分:0)
似乎除非正在编辑的对象存储在@SessionAttributes中,否则spring将从表单中包含的信息中实例化一个新对象。使用@SessionAttributes(“report”)标记控制器解决了我的问题。但不确定这样做的潜在影响。