![](/img/trans.png)
[英]Spring 3 MVC File Upload and Form Validation without losing the file
[英]spring 3 auto form field validation with file upload
我正在使用帶有hibernate驗證器的JSR 303驗證,通過在控制器方法上指定@Valid來自動驗證字段。 驗證工作正常。 我知道在表單中添加了一個上傳字段,並添加了一個@RequestParam(“file”)作為MultipartFile文件。 現在它只有在提交時所有字段都有效時才有效,否則我得到404(錯誤請求)。 如果我刪除@Valid注釋,我會得到javax.validation.ConstraintViolationException,其中包含狀態500的所有驗證違規。
我正在使用Spring 3.2
我的表格:
<form action="#springUrl("/admin/stores/save")" method="POST" enctype="multipart/form-data">
Name:
#springBind( "store.name" )
<input type="text"
name="${status.expression}"
value="$!status.value" /><br>
......
<input type="file" name="file" accept="image/*">
<input type="submit" value="submit"/>
</form>
控制器:
@RequestMapping(value="/save", method = RequestMethod.POST)
@Transactional
public String save(@Valid @ModelAttribute Store store, @RequestParam("file") MultipartFile file, BindingResult bindingResult, ModelMap model) {
if (bindingResult.hasErrors()) {
model.addAttribute("message", "Failed");
model.addAttribute("store", store);
return "admin/stores/form";
} else {
.....
你的問題是方法參數順序。 @ModelAttribute
必須后跟BindingResult
參數。 查看Spring文檔並查看例17.1。 BindingResult和@ModelAttribute的排序無效 。
。 如果它是其中的一部分,您還應該將MultipartFile
添加到表單( Store
)。
Store {
/* Your other fields */
@NotNull
private MultipartFile file;
public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file= file;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.