java使用Spring和html表单获取对象
我试图通过建立一个简单的网站来学习Spring框架,现在我遇到了一个问题
我想这样做:用户选择上传哪个文件,并从列表中选择它是什么类型的文件。现在我有这样的东西:
<form:form modelAttribute="uploadItem" method="post" enctype="multipart/form-data">
<fieldset>
<div class="form_elem">
<label for="file">File</label>
<input type="file" name="fileData"/>
</div>
<div class="form_elem">
<label for="file_type">File type</label>
<form:select path="fileType">
<form:options items="${fileTypes}" />
</form:select>
</div>
<input type="submit"/>
</fieldset>
现在,在我的控制器中
@RequestMapping(value = "/addWordFile", method = RequestMethod.GET)
public String showFileAdder(Model model) {
model.addAttribute(new UploadItem());
model.addAttribute("fileTypes", Arrays.asList("first type", "second type"));
return "questionFileAdd";
}
@RequestMapping(value = "/addWordFile", method = RequestMethod.POST)
public String processUploadedFile(UploadItem uploadItem, Model model)
throws Exception {
String type=uploadItem.getFileType();
return showFileAdder(model);
}
问题是,当用户选择文件类型时,我只得到一个字符串,我需要手动创建一个对象,比如SimpleFileReader使用class作为名称,或者对我支持的每种文件类型只使用big switch case语句
是否可以以html形式显示字符串,但当它被处理时,我会得到某个类的对象
# 1 楼答案
这是一个OO问题,而不是Spring问题。你想要的是一个SimpleFileReader工厂。简单地使用
Map<String, SimpleFileReader>
可能是您的解决方案:keySet()
包含所有文件类型map.get(fileType)
获取与此类型关联的SimpleFileReader您还可以使用en enum:
FileType.values()
为您提供了文件类型数组。Spring可以自动将输入字段映射到枚举,获取关联的文件读取器非常简单