2013-04-10 20 views
0

我有我提交上傳文件格式:春天驗證與BindingResult屬性從來沒有擊中目標控制器方法

<form id="uploadForm" action="#" method="POST" enctype="multipart/form-data"> 
    <div class="instruction popup_inst"> 
     <span class="popup_logo">[@spring.message "pandaLogo"/]</span> 

     <div class="float_right"> 
      <input type="button" id="cancelBtn" class="btn" onclick="closePopupFunctionality();" value="[@spring.message "cancelButton"/]" /> 

      <input class="btn" type="submit" id="submit" onclick="validateFileInput();" value="[@spring.message "uploadButton"/]" /> 
     </div> 

    </div> 
    <span class="popup_title">[@spring.message "uploadFile"/]</span> 
    <div class="popup_container"> 
     [@spring.bind "assayAssessmentsRequestBean"/] 
     [@spring.formInput path="assayAssessmentsRequestBean.designabilityFile.file" fieldType="file" attributes="title='path' class='upload' accept='.txt,.csv,.zip'" /] 
     [@spring.formHiddenInput path="assayAssessmentsRequestBean.dateOfAssessment" attributes="" /] 
     [@spring.formHiddenInput path="assayAssessmentsRequestBean.id" attributes="" /] 
     [@spring.showErrors " " "error" /] 
    </div> 
    <input id="uploadfile" type="hidden" value="${uploadfile}"/> 
</form> 

這種形式打在控制器下面的方法:

@RequestMapping(value = "/uploadFile",method= RequestMethod.POST) 
    public ModelAndView uploadFile(@ModelAttribute(value = "assayAssessmentsRequestBean")AssayAssessmentsRequestBean assayAssessmentsRequestBean,HttpSession session,BindingResult result) throws PanDaApplicationException { 
//mycode 
} 

發生什麼事是該方法從不調用,當我刪除BindingResult屬性時,該方法被調用。

我嘗試了另一種方法,它具有BeanPropertyBindingResult屬性並傳遞目標對象進行驗證,它的工作原理,但從不返回錯誤。

@RequestMapping(value = "/uploadFile",method= RequestMethod.POST) 
    public ModelAndView uploadFile(@ModelAttribute(value = "assayAssessmentsRequestBean")AssayAssessmentsRequestBean assayAssessmentsRequestBean,HttpSession session/*,BindingResult result*/) throws PanDaApplicationException { 
     logger.info(assayAssessmentsRequestBean.getDesignabilityFile().getFile()); 
     BindingResult result=new BeanPropertyBindingResult(assayAssessmentsRequestBean.getDesignabilityFile(),"designabilityFile"); 

回答

2

,你應該有你VANT驗證並認爲BindingResult必須驗證的對象之後緊跟

所以這應該做的工作

public ModelAndView uploadFile(@Valid @ModelAttribute(
    value = "assayAssessmentsRequestBean")AssayAssessmentsRequestBean assayAssessmentsRequestBean,BindingResult result, 
HttpSession session) { 

} 

那麼對象之前@Valid註釋您應該定義您自己的Validator並將其設置爲活頁夾。驗證器將被自動調用。 但我不確定你是否可以用這種方式在multipart上進行驗證。

+0

我會嘗試你所說的感謝:-) – 2013-04-10 14:16:35

+0

它的工作原因是因爲我從你身上「認爲BindingResult應該在驗證對象之後立即跟隨」謝謝:-) – 2013-04-11 12:29:15

+0

你可以刪除「think BindingResult應該在驗證對象之後立即執行「,並且替換爲」BindingResult **必須在驗證對象之後立即**「。 (這篇文章只是保存了我的理智!) – chrsalln 2016-01-12 22:30:37