Spring MVC表单提交数据是否自动绑定子对象?

时间:2010-03-17 15:30:36

标签: 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
@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用户。我不需要做任何特殊的数据绑定来确保我保留信息吗?

1 个答案:

答案 0 :(得分:0)

似乎除非正在编辑的对象存储在@SessionAttributes中,否则spring将从表单中包含的信息中实例化一个新对象。使用@SessionAttributes(“report”)标记控制器解决了我的问题。但不确定这样做的潜在影响。