0
我正在用Spring和Hibernate Validation驗證表單來解決這個問題。休眠驗證只在保存時不起作用
我有一個註釋驗證的基本形式。 當我添加一個新的對象,我的驗證工程很好,但是當我嘗試更新現有的對象時,驗證的模型註釋工作,因爲che對象沒有更新,但我沒有在頁面上的錯誤,即使hasErrors爲true ..
我真的不能明白髮生了什麼......這兩種方法(保存和更新)類似於
我的控制方法有:
// save New
@RequestMapping(value = { path+"/new" } , method = RequestMethod.POST)
public String saveLight(@Valid Luce luce, BindingResult result, ModelMap model, final RedirectAttributes redirectAttributes) {
if (result.hasErrors()) {
return path+"/luce";
}
// Add message to flash scope
redirectAttributes.addFlashAttribute("css", "success");
redirectAttributes.addFlashAttribute("msg", "Luce aggiunta correttamente");
luceService.saveLuci(luce);
return "redirect:/"+path+"/"+luce.getIdLuce();
}
// Save updated
@RequestMapping(value = path+"/{idLuce}", method = RequestMethod.POST)
public String updateLuci(@Valid @ModelAttribute("luce") Luce luce, BindingResult result, ModelMap model, @PathVariable int idLuce, final RedirectAttributes redirectAttributes) {
if (result.hasErrors()) {
logger.debug("Has errors is "+result.hasErrors());
return "redirect:/"+path + "/"+luce.getIdLuce();
}
redirectAttributes.addFlashAttribute("css", "success");
redirectAttributes.addFlashAttribute("msg", "Luce modificata correttamente");
luceService.updateLuci(luce);
logger.debug("ho aggiornato");
return "redirect:/"+path+"/"+luce.getIdLuce();
}
JSP頁面是相同的這兩個操作並且具有,例如,
<spring:bind path="numeroLuce">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label" for="numeroLuce">Numero
Lampada</label>
<div>DEBUG: Status error is ${status.error}</div>
<div class="col-sm-10 form-field">
<form:input path="numeroLuce" id="numeroLuce" type="text"
class="form-control input-md" required="" />
<form:errors path="numeroLuce" cssClass="has-error" />
</div>
</div>
</spring:bind>
控制器上的記錄器說我hasErrors是真實的,但是當渲染頁面時,我得到DEBUG:Status錯誤是錯誤的。這種情況只發生在我調用updateLuci方法時,而不是saveMethod時,它們具有相同的JSP模板頁面。
他們爲什麼表現如此不同?