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模板页面。
他们为什么表现如此不同?