Flash連携機能では、Flashが提供するActionScriptのうち、LoadVarsオブジェクトおよびXMLオブジェクトによる通信をサポートしています。
ActionScriptとはFlashが提供するスクリプト言語で、ムービーの制御やサーバアプリケーションとの通信が可能です。
ActionScriptはボタンのクリックや、キーの入力などのイベントによって動作が開始します。
ActionScriptの詳細はFlash MXのマニュアルを参照してください。
以下ではLoadVarsオブジェクトおよびXMLオブジェクトを利用したFlashの作成方法について説明します。
LoadVarsを使用する場合
LoadVarsオブジェクトを使用した場合の動作概要を次に示します。
LoadVarsオブジェクトを利用した場合、HTMLのフォームを送信した場合と同様に、キーと値の組みがサーバに送信されます。
送信されたキーは、サーバ側のデータBeanのプロパティと対応して値が格納されます。例えば、value="1"というデータを送信した場合、データBeanのvalueフィールドに"1"が格納されます。ただし、Apcoordinatorで予約されているキー(uji_bean、uji_xmlBean、uji_verb)はデータBeanに格納されません。
以下の例では、mypkg.MyDataBeanに対して、value1="3"、value2="4"、calMethod="add"というデータと、"myverb"というコマンドを送信しています。
1: on (release) { 2: myLoadVars = new LoadVars(); 3: myLoadVars.uji_bean="mypkg.MyDataBean"; 4: myLoadVars.uji_verb = "myverb"; 5: myLoadVars.value1="3"; 6: myLoadVars.value2="4"; 7: myLoadVars.calMethod="add"; 8: repData = new LoadVars(); 9: repData.onLoad = myOnLoad; 10: myLoadVars.sendAndLoad("http://[ホスト名]/[サーブレット名]", repData); 11: 12: function myOnLoad(success){ 13: if(success){ 14: // サーバとの通信が成功した場合の処理 15: _root.textarea.text = repData.message; 16: } 17: } 18: }
ActionScriptが起動するためのイベントハンドラです。この例ではボタンのクリックが解除されたときにActionScriptが起動します。
LoadVarsオブジェクトを作成しています。
Apcoordinatorに必要なリクエストパラメタを設定しています。上記例ではuji_beanリクエストパラメタに"mypkg.MyDataBean"を、uji_verbリクエストパラメタに"myverb"を設定しています。Flash連携機能ではこの他にuji_xmlBeanリクエストパラメタを指定することができます。
リクエストパラメタ名 | 機能 | 省略時の動作 |
---|---|---|
uji_bean | 送信データを格納するデータBeanをパッケージ名を含めて指定します。XMLデータBeanに送信データを格納する場合は"com.fujitsu.uji.xml.XmlDataBean"を指定してください。 | 指定されていない場合はデータBeanを作成しません。 |
uji_xmlBean | 送信データをXMLデータBeanに格納する場合のルート要素名を指定します。 | XMLデータBeanに送信データを格納する場合は省略できません |
uji_verb | コマンドを指定します。 | コマンドを送信しません。 |
送信するデータを設定しています。この例では次のデータを設定しています。データBeanに設定される場合には、キーがデータBeanのプロパティ名と対応し、XMLデータBeanに設定される場合はキーがXMLのルート要素直下の要素名に対応します。
キー | 値 |
---|---|
value1 | 3 |
value2 | 4 |
calMethod | add |
返却されたデータを格納するためのオブジェクトを生成し、通信が完了した場合に呼び出すイベントを登録しています。
サーバにデータを送信し返却値を受け取ります。データを送信する場合に使用するメソッドによって返却されたデータの受け取り方が異なります。
sendAndLoadメソッドに指定したオブジェクトに返却値が格納されます。指定できるものはLoadVarsオブジェクトかXMLオブジェクトです。
サーバアプリケーションからの返却値がそのままブラウザに表示され、画面遷移が発生します。Webアプリケーションとしての処理を継続する場合はJSP名を返却してください。
通信が成功した場合の処理を記述します。ここでは、テキスト(textareaオブジェクト)にrepDataのmessage変数の値を代入して画面に表示しています。
XMLを使用する場合
XMLオブジェクトを使用した場合の動作概要を次に示します。
XMLオブジェクトを利用した場合、サーバ側にXMLデータが送信され、ビジネスクラスではXMLデータBeanとして受け取ることが可能です。
このとき、コマンドや格納先のXMLデータBean(XMLデータBeanを拡張した場合)を指定することはできません。
以下では"<root><data>mydata</data></root>"というXMLデータを送信する例を示します。
1: on (release) { 2: myXML = new XML("<root><data>mydata</data></root>"); 3: repXML = new XML(); 4: repXML.onLoad = myOnLoad; 5: myXML.sendAndLoad("http://[ホスト名]/[サーブレット名]", repXML); 6: 7: function myOnLoad(success){ 8: if(success){ 9: // サーバとの通信が成功した場合の処理 10: _root.textarea.text=repXML.toString(); 11: } 12: } 13: }
ActionScriptが起動するためのイベントハンドラです。この例ではボタンのクリックが解除されたときにActionScriptが起動します。
XMLオブジェクトを作成しています。この例ではコンストラクタでXMLデータを生成しています。
返却されたデータを格納するためのオブジェクトを生成し、通信が完了した場合に呼び出すイベントを登録しています。
サーバにデータを送信し返却値を受け取ります。データを送信する場合に使用するメソッドによって返却されたデータの受け取り方が異なります。
sendAndLoadメソッドに指定したオブジェクトに返却値が格納されます。指定できるものはLoadVarsオブジェクトかXMLオブジェクトです。
サーバアプリケーションからの返却値がそのままブラウザに表示され、画面遷移が発生します。Webアプリケーションとしての処理を継続する場合はJSP名を返却してください。
通信が成功した場合の処理を記述します。ここでは、テキスト(textareaオブジェクト)にrepXMLが保持しているXMLデータを文字列として代入し、画面に表示しています。
サーバ例外の通知
サーバアプリケーションで例外が発生した場合、ActionScriptオブジェクトには"uji_flashException"をキーにして例外情報が通知される場合があります。サーバアプリケーションからの例外の通知方法については“アプリケーション例外が発生した場合のクライアントへの通知方法”参照してください。
サーバアプリケーションが正常に終了しているかどうかは"uji_flashException"を参照してください。LoadVarsオブジェクトの場合は"uji_flashException"変数を、XMLオブジェクトの場合は、ルート要素直下のテキストノードを参照してください。チェックの例を次に示します。
LoadVarsオブジェクトの場合
on (release) { myLoadVars = new LoadVars(); myLoadVars.uji_bean="mypkg.MyDataBean"; myLoadVars.uji_verb = "myverb"; myLoadVars.value1="3"; myLoadVars.value2="4"; myLoadVars.calMethod="add"; repData = new LoadVars(); repData.onLoad = myOnLoad; myLoadVars.sendAndLoad("http://[ホスト名]/[サーブレット名]", repData); function myOnLoad(success){ if(success){ if(repData.uji_flashException != null){ // 例外が返却された場合の処理 } else { // サーバとの通信が成功した場合の処理 } } } }
XMLオブジェクトの場合
on (release) { myXML = new XML("<root><data>mydat</data></root>"); repXML = new XML(); repXML.onLoad = myOnLoad; myXML.sendAndLoad("http://[ホスト名]/[サーブレット名]", repXML); function myOnLoad(success) { if (success) { // ルートノード直下の要素に"uji_flashException"が含まれているかチェック index = repXML.firstChild.nodeValue.indexOf("uji_flashException"); if (index != -1) { // 例外発生時の処理を記述 // 例外メッセージの取得例("uji_flashException="以降のメッセージを取得) _root.message.text = repXML.firstChild.nodeValue.substr(index+19); } else { _root.message.text = repXML.toString(); } } } }
文字エンコーディングについて
Flash Player 6では、デフォルトの文字エンコーディングがUTF-8になっています。ただし、Flashコンテンツの1フレーム目のフレームスクリプト最上部に次の一行を加えることで、文字エンコーディングを"Shift_JIS"にすることができます。詳細はAdobe社のホームページを参照してください。
System.useCodepage = true;
また、Webcoordinatorアプリケーションでは、初期化パラメタuji.defaultEncodingを利用することで文字エンコーディングを指定することができます。ご使用の環境に合わせて、次の表を参考に文字エンコーディングを設定してください。
UTF-8を使用する場合 | Shift_JISを使用する場合 |
---|---|
[Flashの設定] [Apcoordinatorの設定] | [Flashの設定] [Apcoordinatorの設定] |