我有一个文件输入和文本输入的集合。每个文件输入都有一个相应的类型字段。我需要将这两个值作为列表检索。目前,我尝试过以下操作:
Controller 代码:
@RequestMapping(value = "/{id}", method = RequestMethod.POST)
public OutletIndex updateOutlet(@PathVariable String id,
@ModelAttribute @Valid OutletIndex outlet,
@RequestParam(value = "file", required = false) List<MultipartFile> file,
@RequestParam(value = "types", required = false) List<MultipartFile> types,
HttpServletRequest request
) {
//......
}
HTML 代码:
<input type="text" name="types"/>
<input type="text" name="types"/>
<input type="text" name="types"/>
<input type="text" name="types"/>
<input type="file" name="file"/>
<input type="file" name="file"/>
<input type="file" name="file"/>
<input type="file" name="file"/>
<小时/>
如果文件输入选择任何文件,则效果良好。如果我们不选择任何文件,它不会显示在列表中,但文本输入会显示,即使它是空的。我该如何解决这个问题?
我还尝试使用 request.getParameterMap() 获取值,但两种方法的结果是相同的。
当我选择 2 个文件时,输出会是这样的。
types
列表大小为 4
,file
列表大小为 2
。
如果没有选择文件,我可以在列表中将其设置为null
吗?
最佳答案
执行此操作的最佳方法是让 POJO 映射文件和文本输入。我不确定您想要实现什么,但这可能会对您有所帮助..
你的pojo
public class FileWrapper {
private MultipartFile file;
private String type;
public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file = file;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
你的 Controller
@RequestMapping(value = "/file", method = RequestMethod.POST)
public OutletIndex updateOutlet(@ModelAttribute List<FileWrapper> fileWrapper) {
// ......
for (FileWrapper file : fileWrapper) {
if (file.getFile() != null && StringUtils.isNotEmpty(file.getType())) {
// your logic
}
}
}
你的jsp文件
<form method="post" action="/file" modelAttribute="fileWrapper">
<input type="text" name="types[0]" /> <input type="text"
name="types[1]" /> <input type="text" name="types[2]" /> <input
type="text" name="types[3]" /> <input type="file" name="file[0]" /> <input
type="file" name="file[1]" /> <input type="file" name="file[2]" /> <input
type="file" name="file[3]" />
</form>
这对您来说应该很舒服。可以尝试一下。
关于java - 在 Spring MVC 中同时处理文件和文本输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41221557/