Предоставляет ли форма Spring MVC данные, автоматически связывающие дочерние объекты? - PullRequest
0 голосов
/ 17 марта 2010

У меня есть модель данных, которая выглядит примерно так:

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 имеет нулевого пользователя. Мне не нужно выполнять какую-либо специальную привязку к данным, чтобы гарантировать, что информация сохраняется?

1 Ответ

0 голосов
/ 17 марта 2010

Кажется, что если редактируемый объект не сохранен в @SessionAttributes, то Spring создаст новый объект из информации, включенной в форму. Маркировка контроллера с помощью @SessionAttributes («report») решила мою проблему. Однако не уверен в потенциальном влиянии этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...