Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC表单是否自动提交数据绑定子对象?_Java_Forms_Spring Mvc - Fatal编程技术网

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是否只是从表单中包含的值实例化一个新对象?因此,是否会通过隐藏标记丢失表单中未嵌入的任何信息?或者我没有正确地设置东西。