2013-07-11 26 views
1

我有一個驗證錯誤的問題時,我提出我的形式一樣,在顯示的網頁上一個空的日期顯示:Spring MVC的3:和CustomDateEditor工作,但有一個驗證錯誤(BindingResult)

Failed to convert property value of type java.lang.String to required type 
java.util.Date for property dateFin; nested exception is 
java.lang.IllegalArgumentException: Could not parse date: Unparseable date: "" 

我的控制器看起來是這樣的:

@Controller 
    @SessionAttributes 
    @Lazy 
    public class MyController extends AbstractMVPAction { 
     @RequestMapping(value = "/secured/cp/saveProgram") 
     public String enregistrerProgramme(@ModelAttribute Program program, 
       BindingResult bindingResult, ModelMap model){ 
      if(bindingResult.hasErrors()){ 
       model.put("program", program); 
       return "/secured/cp/showProgram" 
      }else{ 
       // ... saves the programme 
       model.put("program", null); 
       return "/secured/cp/backToOtherPage" 
      } 
     } 
     @InitBinder 
     public void initBinder(WebDataBinder binder) { 
      binder.registerCustomEditor(Date.class, new CustomDateEditor(
        new SimpleDateFormat("dd/MM/yyyy"), false)); 
     } 
    } 

當我調試我的方法,我可以看到我的目的是好的,我做了修飾的很好報告,日期爲空,但bindingResult.hasErrors()返回true根據我的看法,它不應該。

我曾經在Program對象和一個@Valid註解中有一些驗證註釋,但是我把它們都刪除了,仍然有問題。

我讀過很多類似的問題,每次解決方案都是@ InitBinder/CustomDateEditor。 所以它是在那裏,我想它的工作原理,日期以我想要的方式顯示(在我添加它之前,情況並非如此),如果它不是空的,我可以提交它們。

感謝的提前,我開始發瘋......

回答

3

你構建一個和CustomDateEditor明確禁止空字符串。檢查Javadoc for the constructor you're using,當布爾參數爲false時,將空字符串傳遞給該編輯器會導致出現IllegalArgumentException。

試試這個:

@InitBinder 
    public void initBinder(WebDataBinder binder) { 
     binder.registerCustomEditor(Date.class, new CustomDateEditor(
       new SimpleDateFormat("dd/MM/yyyy"), false)); 
    } 
+1

Definitly我需要一個晚上,我在早餐想着這樣的事情...複製/粘貼是邪惡的!感謝您的回答! – scherzoteller

相關問題