ファイルとフォームデータを転送する

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

説明

DEXTUploadX5はフォームデータを自動的に転送するポリシーを提供しない。

DEXTUploadX5はファイルアップロード完了後、コールバック関数(onDX5UploadCompleted)を呼び出します。この関数では、サーバーから受信したファイル情報とは別に、フォーム要素のフォームデータを送信する方法を使用することを推奨します。この方法では、ファイルとその他の文字列データを完全に分離して処理できるため、サービスの処理構造が明確になるというメリットがあります。

function transfer() {
	var dx = dx5.get("dext5");
	if (dx.hasUploadableItems()) {
		// アップロードするファイルがあれば、最初にアップロードする。
		// アップロードが完了すると、onDX5UploadCompletedコールバック関数が呼び出されます。
		// コールバック関数が呼び出されたときに送信するフォームデータを設定します。
		dx.upload("AUTO");
	} else {
		// アップロードするオブジェクトがないため、すぐにフォームデータを送信します。
		submit(null);
	}
}

// これは、アップロードが完了したとき(サーバー側のファイルアップロード処理が完了したとき)に呼び出されるコールバック関数です。
function onDX5UploadCompleted(id) {
	// ORAFなので、無条件にレスポンスデータが1つある。
	// このレスポンスデータでフォームデータを送信する。
	submit(dx5.get(id).getResponses()[0]);  
}

function submit(response) {
	var formObj = document.getElementsByTagName("form")[0];
	
	// レスポンスのデータを hidden 要素に設定します。
	formObj.newFileKeys.value = response || "";
	
	// フォーム・データを送信します。
	formObj.submit();
}

この構造では、ファイルのアップロードはupload-file.doにマップされたFileServiceControllerによって処理され、フォームデータは最終的にform-process.doにマップされたSampleControllerによって処理されます。