У меня проблема с кодом моего контроллера. GET работает нормально (обе пустые формы + форма, заполненная из базы данных), POST отлично работает только для создания нового объекта, но не работает для редактирование .Часть моего класса @Controller:
@RequestMapping(value = "/vehicle_save.html", method = RequestMethod.GET)
public String setUpForm(@RequestParam(value="id", required = false) Long id, ModelMap model) {
Vehicle v;
if (id == null) {
v = new Vehicle();
} else {
v = vehicleManager.findVehicle(id);
}
model.addAttribute("vehicle", v);
return "vehicle_save";
}
@RequestMapping(value = "/vehicle_save.html", method = RequestMethod.POST)
public String save(@ModelAttribute("vehicle") Vehicle vehicle, BindingResult result, SessionStatus status) {
vehicleValidator.validate(vehicle, result);
if (result.hasErrors()) {
return "vehicle_save";
}
if(vehicle.getId() == null) {
vehicleManager.createVehicle(vehicle);
} else {
vehicleManager.updateVehicle(vehicle);
}
status.setComplete();
return "redirect:vehicle_list.html";
}
Первый метод создает объект транспортного средства (включая его ID ).Но второй метод получает тот же объект без поля ID (значение равно нулю).
Что я могу сделать: вручную установить vehicle.setID (идентификатор из параметров) и затем сохранить его вбаза данных.Это вызывает JPAOptimisticLockException + мне не нравится это решение.
Есть ли способ передать мой объект Vehicle с идентификатором во второй метод?Кстати, я хотел бы избежать добавления скрытого поля ID в JSP.