2012-05-04 11 views
0

私はSpringフレームワークを簡単なWebサイトを構築して学習しようとしていますが、今は問題があります。オブジェクトを取得するためにSpringフォームとHTMLフォームを使用する

私はこのようなものを作りたいと思っています。ユーザーはアップロードするファイルを選択し、リストからどのファイルタイプを選択するのですか?今、私はこのような何か持っている場合:私はここに

@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); 
} 

を持って私のコントローラで今

<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> 

すると、ユーザーはファイルの種類を選択したとき、私は唯一の文字列を取得し、私が必要となり、問題となっていますsimpleFileFileReaderのように、nameのクラスを使用するか、私がサポートしているすべてのタイプのファイルに対して大きなswitch-caseステートメントを使用するなど、手動でオブジェクトを作成します。

文字列をHTML形式で表示することはできますか?処理されると、クラスのオブジェクトが取得されますか?

答えて

1

これは、春質問よりむしろOO質問です。あなたが望むのは、SimpleFileReaderのファクトリです。単にMap<String, SimpleFileReader>を使用すると、あなたのソリューションが考えられます。

  • マップのkeySet()あなたはGUIからファイルタイプを得れば、この型に関連付けられているSimpleFileReaderを取得するためにmap.get(fileType)を使用
  • すべての種類のファイルが含まれています
  • また、列挙型エン使用することができます

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(); 
+0

ありがとう、 – Andna

関連する問題