2015-12-02 76 views
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模板页面。

他们为什么表现如此不同?

回答

0

最后我找到了解决办法,我在这里写的,以防有人有我同样的问题...

的问题是在updateLuci方法的return语句。

它不是一个重定向,但我必须显示相同的窗体视图。

所以它应该是

if (result.hasErrors()) { 
     return path+"/luce"; 
    } 

希望这会帮助别人