Java SpringMVC表单是否自动提交数据绑定子对象?
我有这样一个数据模型:Java SpringMVC表单是否自动提交数据绑定子对象?,java,forms,spring-mvc,Java,Forms,Spring Mvc,我有这样一个数据模型: public class Report { // report owner private User user; ... typical getter setter ... } public class User { ... omitted for clarity } 创建报表时,将当前用户设置为报表用户对象。编辑报告时,处理POST请求的spring控制器接收到一个报告,其中用户对象为null。以下是我的控制器的外观: @Controller @
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方法中查看调试器时,传入的报告r有一个空用户。我不需要做任何特殊的数据绑定来确保信息被保留,是吗?除非正在编辑的对象存储在@SessionAttributes中,否则spring将根据表单中包含的信息实例化一个新对象。用@SessionAttributesreport标记控制器解决了我的问题。但是,不确定这样做的潜在影响。spring是否只是从表单中包含的值实例化一个新对象?因此,是否会通过隐藏标记丢失表单中未嵌入的任何信息?或者我没有正确地设置东西。