Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第3部 Webアプリケーションの開発> 第19章 Flashとの連携> 19.2 Flash連携のアプリケーション

19.2.1 Flashの作成

Flash連携機能では、Flashが提供するActionScriptのうち、LoadVarsオブジェクトおよびXMLオブジェクトによる通信をサポートしています。
ActionScriptとはFlashが提供するスクリプト言語で、ムービーの制御やサーバアプリケーションとの通信が可能です。
ActionScriptはボタンのクリックや、キーの入力などのイベントによって動作が開始します。
ActionScriptの詳細はFlash MXのマニュアルを参照してください。
以下ではLoadVarsオブジェクトおよびXMLオブジェクトを利用したFlashの作成方法について説明します。

LoadVarsを使用する場合

LoadVarsオブジェクトを使用した場合の動作概要を次に示します。

loadvarsオブジェクトを使用した場合の動作概要図

LoadVarsオブジェクトを利用した場合、HTMLのフォームを送信した場合と同様に、キーと値の組みがサーバに送信されます。
送信されたキーは、サーバ側のデータBeanのプロパティと対応して値が格納されます。例えば、value="1"というデータを送信した場合、データBeanのvalueフィールドに"1"が格納されます。ただし、Apcoordinatorで予約されているキー(uji_beanuji_xmlBeanuji_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:   }

1行目
ActionScriptが起動するためのイベントハンドラです。この例ではボタンのクリックが解除されたときにActionScriptが起動します。

2行目
LoadVarsオブジェクトを作成しています。

3行目-4行目
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 コマンドを指定します。 コマンドを送信しません。
5行目-7行目
送信するデータを設定しています。この例では次のデータを設定しています。データBeanに設定される場合には、キーがデータBeanのプロパティ名と対応し、XMLデータBeanに設定される場合はキーがXMLのルート要素直下の要素名に対応します。

キー
value1 3
value2 4
calMethod add
8行目-9行目
返却されたデータを格納するためのオブジェクトを生成し、通信が完了した場合に呼び出すイベントを登録しています。

10行目
サーバにデータを送信し返却値を受け取ります。データを送信する場合に使用するメソッドによって返却されたデータの受け取り方が異なります。

sendAndLoadメソッドを使用する場合
sendAndLoadメソッドに指定したオブジェクトに返却値が格納されます。指定できるものはLoadVarsオブジェクトかXMLオブジェクトです。
sendメソッドを使用する場合
サーバアプリケーションからの返却値がそのままブラウザに表示され、画面遷移が発生します。Webアプリケーションとしての処理を継続する場合はJSP名を返却してください。


12行目-17行目
通信が成功した場合の処理を記述します。ここでは、テキスト(textareaオブジェクト)にrepDatamessage変数の値を代入して画面に表示しています。

XMLを使用する場合

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

1行目
ActionScriptが起動するためのイベントハンドラです。この例ではボタンのクリックが解除されたときにActionScriptが起動します。

2行目
XMLオブジェクトを作成しています。この例ではコンストラクタでXMLデータを生成しています。

3行目-4行目
返却されたデータを格納するためのオブジェクトを生成し、通信が完了した場合に呼び出すイベントを登録しています。

5行目
サーバにデータを送信し返却値を受け取ります。データを送信する場合に使用するメソッドによって返却されたデータの受け取り方が異なります。

sendAndLoadメソッドを使用する場合
sendAndLoadメソッドに指定したオブジェクトに返却値が格納されます。指定できるものはLoadVarsオブジェクトかXMLオブジェクトです。
sendメソッドを使用する場合
サーバアプリケーションからの返却値がそのままブラウザに表示され、画面遷移が発生します。Webアプリケーションとしての処理を継続する場合はJSP名を返却してください。

7行目-12行目
通信が成功した場合の処理を記述します。ここでは、テキスト(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フレーム目のフレームスクリプト最上部に次の一行を加えることで、文字エンコーディングを"iso-2022-jp"にすることができます。 詳細はMacromedia社のホームページを参照してください。


System.useCodepage = true;

また、Webcoordinatorアプリケーションでは、初期化パラメタuji.defaultEncodingを利用することで文字エンコーディングを指定することができます。ご使用の環境に合わせて、次の表を参考に文字エンコーディングを設定してください。

UTF-8を使用する場合 iso-2022-jpを使用する場合
[Flashの設定]
不要

[Apcoordinatorの設定]
web.xmluji.defaultEncoding初期化パラメタに"UTF-8"を記載
[Flashの設定]
"System.useCodepage = true;"を記載

[Apcoordinatorの設定]
web.xmluji.defaultEncoding初期化パラメタに"iso-2022-jp"を記載

目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005