我在使用Spring和Hibernate验证进行表单验证时遇到了这个问题。
我有一个带注释验证的基本表单。 当我添加一个新对象时,我的验证工作正常,但是当我尝试更新现有对象时,验证的模型注释是有效的,因为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:状态错误是错误的。这种情况只发生在我调用updateLuci方法时,而不是saveMethod,它们具有相同的JSP模板页面。
为什么他们表现得如此不同?
答案 0 :(得分:0)
最后我找到了解决方案,我在这里写了以防有人遇到同样的问题...
问题出现在updateLuci
方法的返回语句中。
它不是重定向,但我必须显示相同的表单视图。
所以它应该是
if (result.hasErrors()) {
return path+"/luce";
}
希望这会有助于其他人