有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    这是一个OO问题,而不是Spring问题。你想要的是一个SimpleFileReader工厂。简单地使用Map<String, SimpleFileReader>可能是您的解决方案:

    • 映射的keySet()包含所有文件类型
    • 从GUI获取文件类型后,使用map.get(fileType)获取与此类型关联的SimpleFileReader

    您还可以使用en enum:

    public enum FileType {
        TYPE_1 {
            public SimpleFileReader getFileReader() {
                return new Type1SimpleFileReader();
            }
        },
    
        TYPE_2 {
            public SimpleFileReader getFileReader() {
                return new Type2SimpleFileReader();
            }
        };
    
        public abstract SimpleFileReader getFileReader();
    }
    

    FileType.values()为您提供了文件类型数组。Spring可以自动将输入字段映射到枚举,获取关联的文件读取器非常简单

    SimpleFileReader reader = fileType.getFileReader();