我的控制器代碼有問題。 GET工作正常(包括空表單+形式從數據庫填充),POST只爲創建新對象工作正常,但編輯不起作用。我的@Controller類的一部分:使用@Controller的Spring-MVC 2.5編輯窗體的ID
@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(id從參數),然後將其保存到數據庫。這導致JPAOptimisticLockException +我不喜歡那個解決方案。
有沒有辦法將我的車輛對象與ID傳遞給第二種方法?順便說一句,我想避免在JSP中添加隱藏的ID字段。
我已經試過了,但在嘗試打開表單時(空或填充),我得到一個奇怪的異常:[>> exception link <<](http:// pastebin .com/D2Qsgzws) – 2012-01-31 11:41:34
編輯:例外只發生在試圖創建新車(不顯示窗體)。現在編輯工作。 – 2012-01-31 11:50:19
更新:問題已解決。@SessionAttributes沒空形式的工作,因爲我已經重寫哈希碼:\t'公衆詮釋的hashCode(){ \t \t如果(ID == NULL){ \t \t \t拋出新IllegalStateException異常( 「無法散列臨時對象」) ; \t \t} \t \t return id.hashCode();'刪除覆蓋後,它工作正常。 – 2012-01-31 12:09:38