0

簡単な Web サイトを作成して 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);
}

ここに問題があります。ユーザーがファイルのタイプを選択すると、文字列のみが取得され、SimpleFileFileReader のように、名前にクラスを使用するか、サポートするすべてのタイプのファイルに大きな switch-case ステートメントを使用するだけで、オブジェクトを手動で作成する必要があります。

String を HTML 形式で表示することは可能ですが、処理すると何らかのクラスのオブジェクトが取得されますか?

4

1 に答える 1

1

これは、Spring の質問というよりはむしろ OO の質問です。必要なのは、SimpleFileReader のファクトリです。a を使用するだけ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();
于 2012-05-04T10:59:36.173 に答える