新規ファイルをポストに登録し、既存ファイルを削除する

基本的な例 > マルチモジュール > 例07

説明

すでにアップロードされたファイルは、仮想ファイルを使って表現することができ、そのファイルのユニーク・キーはvindexプロパティを使って登録される。

つまり、既存のファイルを削除するということは、仮想ファイルを削除するということである。

これは先ほどの「ファイルとフォームデータの転送」の例と同じですが、サブミット時に削除された仮想ファイルの情報を渡す必要があるという違いがあります。

function submit(response) {
	var formObj = document.getElementsByTagName("form")[0];
		
	formObj.newFileKeys.value = response || "";
	
	// 削除された仮想ファイルの配列を取得する。
	var arr = dx5.get("dext5").getRemovedFiles();  
	
	// vindex;vindex;...という形式の文字列を作成し、登録する。
	var deleted = arr.map(function(v) { return v.vindex; }).join(";");  
	
	formObj.deleteFileKeys.value = deleted || "";
	
	formObj.submit();
}

サーバー側でフォームデータを処理する場合、削除されたファイルを処理するのがよい。

@RequestMapping(value = "/service/form-process.do", method = RequestMethod.POST)
public String formprocess(..., @RequestParam(value = "deleteFileKeys", required = false) String deleteFileKeys, ...) {

	if (deleteFileKeys != null) {
		// この例では、単にファイルを削除するかどうかを設定している、 
		// しかし、通常は、関連するDBのファイルテーブルから対象のファイル情報を削除する必要があります。
	}
	...	
	if (deleteFileKeys != null) {
		// リアルサーバーにアップロードされた物理ファイルを削除する処理は、トランザクションの終了ごとに安全に行われる。
	}
	...
}.