У меня есть модель данных, которая выглядит примерно так:
public class Report {
// report owner
private User user;
... typical getter setter ...
}
public class User {
... omitted for clarity
}
Что происходит, когда создается отчет, текущему пользователю назначается объект пользователя отчета. Когда отчет редактируется, контроллер пружины, обрабатывающий запрос POST, получает отчет, в котором объект пользователя имеет значение 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}
и отображается правильный результат. Однако, когда я смотрю на отладчик в методе процесса, переданный в Report r имеет нулевого пользователя. Мне не нужно выполнять какую-либо специальную привязку к данным, чтобы гарантировать, что информация сохраняется?