2015-12-02 71 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"; 
    } 

希望這會幫助別人