我是Spring MVC的新手用户。我尝试设计一个上传多个文件的表单,并将表单提交的操作重定向到控制器URL,并且明智地将表单的命令名定义为需要绑定的模型属性。所以我假设表单参数将被映射为定义的路径'在带有模型属性参数的标签中。
我在下面发布我的代码:
SampleForm.jsp
assert
MyController.java
delete
Model.java
<form:form id="exampleFullForm" commandName="attribute1" enctype="multipart/form-data" method="post" autocomplete="off" novalidate="novalidate" class="fv-form fv-form-bootstrap" action="url1">
<form:input type="text" class="form-control" name="accnumber" path="account_number"/>
<form:input type="file" name="proof1" required="" file-model="proof1" path="files[0].file" id="files[0].file" class="filestyle" />
<form:input type="file" required="" name="proof2" file-model="proof2" path="files[1].file" id="files[1].file" class="filestyle" style="position:inherit;"/>
</form:form>
表单提交后,我收到错误400错误请求。我也附上了帖子参数的快照。据我所知,文件已正确附加。
@RequestMapping(value = "url1", method = RequestMethod.POST,consumes="multipart/form-data")
public ModelAndView createNewMerchantAccount(@ModelAttribute("attribute1") ModelName modelParam, Map<String, Object> models) throws IOException{
//Do Something
return new ModelAndView("successpage");
}
FileBucket模型:
public Model() {
files.add(new FileBucket());
files.add(new FileBucket());
}
@Id
@Column(name = "id")
@GeneratedValue
private Long id;
@Column(name= "account_number")
private Integer account_number;
@Transient
private List<FileBucket> files = new ArrayList<FileBucket>();
//Getters and setters
public List<FileBucket> getFiles() {
return files;
}
public void setFiles(List<FileBucket> files) {
this.files = files;
}
我的标题: Headers_attached_image
帮我解决问题。
答案 0 :(得分:1)
经过几个小时的挣扎,我想出了一条拯救的方法。
在我的控制器中,我忘记添加绑定结果,这就是我调试错误的方法:
@RequestMapping(value = "url1", method = RequestMethod.POST,consumes="multipart/form-data")
public ModelAndView createNewMerchantAccount(@ModelAttribute("attribute1") ModelName modelParam,BindingResult result, Map<String, Object> models) throws IOException{
//Do Something
if(result.hasErrors()) {
System.out.println("Result Error Occured"+result.getAllErrors());
}
return new ModelAndView("successpage");
}
错误似乎是在模型属性之一的异常中。
在将参数转换为定义类型后,它就像魅力一样。
答案 1 :(得分:0)
请参阅以下代码示例,它可以为您提供帮助。
在您的模型中,添加以下即时变量: -
{
"management" : "http://localhost:7474/db/manage/",
"data" : "http://localhost:7474/db/data/",
"bolt" : "bolt://localhost:7687"
}
在你的jsp中,添加以下代码示例: -
class Product{
//other variables
@Transient
private MultipartFile[] productImage;
//getter setter
}
在控制器中使用以下代码片段中的示例: -
<label class="control-label" for="productImage">Upload Picture</label>
<form:errors path="productImage" cssStyle="color:#ff0000;" />
<table id="fileTable" style="border-spacing: 5;">
<tr>
<td><form:input path="productImage" type="file" class="filestyle" data-buttonName="btn-primary" data-buttonBefore="true" /></td>
</tr>
<tr>
<td><form:input path="productImage" type="file" class="filestyle" data-buttonName="btn-primary" data-buttonBefore="true" /></td>
</tr>
</table>
我希望这有助于解决问题。