ここでは、ビジネスロジックを実行して結果を受信するためのJavaScriptアプリケーションの作成方法について説明します。
リクエストの作成
リクエストの作成は、以下の手順で行います。
JavaScriptオブジェクトを作成してデータを格納します。
作成したJavaScriptオブジェクトを文字列に変換します。オブジェクトから文字列への変換には、RcfObjectConverter.encode関数を使用します。
変換した文字列をリクエストパラメーターの値として使えるように、encodeURIComponent関数でエンコードします。
エンコードした文字列を、ビジネスロジックの実行時に指定するリクエストパラメーターに設定します。
ビジネスロジックの実行
ビジネスロジックを実行するには、XMLHttpRequestクラスオブジェクトを生成し、onreadystatechangeプロパティなどの必要なプロパティを設定してリクエストを送信します。
リクエストの送信は、XMLHttpRequestオブジェクトクラスのsend関数を使用します。
コールバック
onreadystatechangeプロパティに設定した関数で、レスポンスの受信完了を待ちます。
レスポンスからのオブジェクト取得
レスポンスからのオブジェクトの取得は、以下の手順で行います。
受信したレスポンスのボディから文字列を取得します。この文字列は、ビジネスロジックから返却されたJSON形式の文字列です。
文字列がJSON形式として正しいかどうかをチェックします。
文字列をevalでオブジェクトに変換します。
参考
evalでオブジェクトに変換する前に、不当なコードが文字列に含まれていないことをチェックしてください。
JSON形式とそのチェック方法については、RFC 4627を参照してください。
以下に、JavaScriptアプリケーションの記述例を示します。
/* イベント処理 */ function onClicked() { try { // リクエストの作成 var obj = new Object(); obj.key = ...; var str = RcfObjectConverter.encode(obj); str = encodeURIComponent(str); var param = 'obj=' + str + '&command=init'; // XMLHttpRequestの生成 var httpReq = new XMLHttpRequest(); // コールバックの設定 httpReq.onreadystatechange = function(res) { if ((httpReq.readyState == 4) && (httpReq.status == 200)) { obj = receive(httpReq.responseText); // 受信したオブジェクトの処理 ...; } } // ビジネスロジックの実行 httpReq.open('post', url, true); httpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); httpReq.send(param); } catch (e) { // エラー処理 ...; } } /* レスポンス受信 */ function receive(res) { // レスポンスからオブジェクト取得 var obj = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test( res.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + res + ')'); if (!obj) { // エラー処理 ...; return null; } return obj; }
ビジネスロジックの実行で使用するJavaScript用の関数を以下に説明します。
JavaScriptアプリケーションの送信データであるオブジェクトを文字列に変換する関数です。
オブジェクトは、Ajaxフレームワークが規定する独自形式で文字列に変換されますが、アプリケーションがこの形式を意識する必要はありません。変換した文字列は、ビジネスロジックの処理で、com.fujitsu.interstage.rcf.converter.RcfBeanConverterクラスのdecodeメソッドでJavaBeanに変換できます。
RcfObjectConverter.encode関数の記述形式
以下に、RcfObjectConverter.encode関数の記述形式を示します。
RcfObjectConverter.encode(dataObj);
dataObj
変換するオブジェクトです。
戻り値
オブジェクトを変換した結果の文字列です。
RcfObjectConverter.encode関数が通知する例外
RcfObjectConverter.encode関数が通知する例外については、「J.2.2 通信フレームワーク(JavaScript)に関するメッセージ」を参照してください。