Top > SAStrutsあれこれ > BlazeDSのFMSを体験しましょう

    <destination id="update_news"/>
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="dto.*" applicationComplete="init()">
 
    <mx:Script>
        <![CDATA[
            import mx.messaging.events.MessageFaultEvent;
            import mx.messaging.messages.IMessage;
            import mx.messaging.messages.AsyncMessage;
            import mx.core.UIComponent;
            import mx.events.ValidationResultEvent;
            import mx.validators.Validator;
            import mx.controls.Alert;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.collections.ArrayCollection;
 
            //入力フォームの初期表示処理
            private function init():void {
                
                System.useCodePage = true;
                jobType.selectedIndex = -1;
                addressService.findAll();
                departmentService.findAll();
            }
            
            //「登録」ボタンクリック時処理
            private function regist():void {
                
                var errors:Array = Validator.validateAll(this.validatorArray);
                if(errors.length  * 0){
                    //データが正常なので登録処理を行います。
                    //BlazeDSがEmployeeDto→Employeeに変換して、EmployeeService#insertに渡します。
                    employeeService.insert(addModel);
                } else {
                    //バリデーションエラー時の処理
                    var errorFields:Array = [];
                    var errorMessages:Array = [];
                    for each (var e:ValidationResultEvent in errors) {
                        //エラー対象のプロパティ名格納
                        errorFields.push(e.target.source);
                        //エラーメッセージ格納
                        errorMessages.push(e.message);
                    }
                    for each (var c:UIComponent in [ ename, jobType, salary, departmentId, addressId ]) {
                        var n:int = errorFields.indexOf(c);
                        if (n >= 0) {
                            //エラープロパティを強調(太枠)表示します。
                            c.setStyle("borderStyle", "solid");
                            c.setStyle("borderThickness", 3);
                        } else {
                            c.setStyle("borderStyle", "inset");
                        }
                    }
                }
            } 
           
            // サーバーから受信した部署データをコンボボックスにセット
            private function setDepartment(e:ResultEvent):void {
                departmentId.dataProvider = e.result;
                departmentId.selectedIndex = -1;
            }
            
            // サーバーから受信した住所データをコンボボックスにセット
            private function setAddress(e:ResultEvent):void {
                addressId.dataProvider = e.result;
                addressId.selectedIndex = -1;
            }
                       
            // 登録成功時のハンドラ
            private function registResultHandler(e:ResultEvent):void {
                
                var message:IMessage = new AsyncMessage();
                message.body.news = "従業員情報が新たに登録されましたよ〜";
                producer.send(message);
        
                Alert.show("登録成功です");
            }
            
            // サーバー処理の失敗時のハンドラ
            private function faultHandler(e:FaultEvent):void {
                Alert.show("サーバー処理失敗\n\n理由 : " + e.fault.message);
            }
    
            // メッセージ送信処理の失敗時のハンドラ
            private function messageFaultHandler(e:MessageFaultEvent):void {
                Alert.show("サーバー処理失敗\n\n理由 : " + e.message);
            }
        ]]>
    </mx:Script>
 
    <!-- 
         destination(FMS)へメッセージをパブリッシュ(送信)するProducerを宣言します。
    -->    
    <mx:Producer id="producer" destination="update_news" fault="messageFaultHandler(event)"/>
        
    <local:EmployeeDto id="addModel">
        <local:name>{ename.text}</local:name>
        <local:jobType>{jobType.value}</local:jobType>
        <local:salary>{salary.text}</local:salary>
        <local:departmentId>{departmentId.selectedItem.id}</local:departmentId>
        <local:addressId>{addressId.selectedItem.id}</local:addressId>
    </local:EmployeeDto>
 
    <mx:Panel title="Form Container Example" height="450" width="50%" 
        paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">
 
        <mx:Text width="100%" color="blue"
            text="Moving from one form field to another triggers the validator."/>
 
        <mx:Form width="100%" height="100%" defaultButton="{submit}">
            <mx:FormHeading label="Enter values into the form."/>
 
            <mx:FormItem label="Name" required="true">
                <mx:TextInput id="ename" width="200"/>
            </mx:FormItem>
 
            <mx:FormItem label="JobType" required="true">
                <mx:ComboBox id="jobType" width="200">
                  <mx:dataProvider>
                    <mx:Array>
                      <mx:Object label="CLERK" data="CLERK" />
                      <mx:Object label="SALESMAN" data="SALESMAN" />
                      <mx:Object label="MANAGER" data="MANAGER" />
                    </mx:Array>
                  </mx:dataProvider>
               </mx:ComboBox>
            </mx:FormItem>
 
            <mx:FormItem label="Salary" required="true">
                <mx:TextInput id="salary" width="200"/>
            </mx:FormItem>
 
            <mx:FormItem label="Department" required="true">
                <mx:ComboBox id="departmentId" labelField="name" width="200">
                </mx:ComboBox> 
            </mx:FormItem>
             
            <mx:FormItem label="Address" required="true">
                <mx:ComboBox id="addressId" labelField="name" width="200">
                </mx:ComboBox> 
            </mx:FormItem> 
            
            <mx:FormItem>
                <mx:Button label="登録" id="submit" width="108" click="regist();"/>
            </mx:FormItem>
        </mx:Form>
 
    </mx:Panel>
    
    <!-- 
         フォームデータのバリデーションチェック
         まとめてチェックできるように配列化しておきます。
     -->
    <mx:Array id="validatorArray">
        <mx:StringValidator source="{ename}" property="text" minLength="1" maxLength="32"/>
        <mx:StringValidator source="{jobType}" property="text" />
        <mx:StringValidator source="{departmentId}" property="text" />
        <mx:StringValidator source="{addressId}" property="text" />
        <mx:NumberValidator source="{salary}" property="text" integerError="Enter Integer value"
            minValue="0" domain="int"/>
    </mx:Array>
    
    <!--
         リモートオブジェクトを生成します。
    -->
    <mx:RemoteObject id="employeeService" destination="employeeService">
        <mx:method name="insert" result="registResultHandler(event)" fault="faultHandler(event)" />
    </mx:RemoteObject>
    <mx:RemoteObject id="departmentService" destination="departmentService">
        <mx:method name="findAll" result="setDepartment(event)" fault="faultHandler(event)" />
    </mx:RemoteObject>
    <mx:RemoteObject id="addressService" destination="addressService">
        <mx:method name="findAll" result="setAddress(event)" fault="faultHandler(event)" />
    </mx:RemoteObject>
    
</mx:Application>
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
<?xml version="1.0" encoding="utf-8"?>
<!-- (1)applicationComplete="show()"はHTMLのonloadです。-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="show();consumer.subscribe()">
    <mx:Script>
        <![CDATA[
            import mx.formatters.DateFormatter;
            import mx.messaging.messages.IMessage;
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
   
            /** 
             * 非同期でサーバーから従業員リストを取得します。
             */
            private function show():void {
                srv.findAll();
            }
        
            /** 
             * 成功ハンドル
             */
            public function resultHandler(event:ResultEvent):void {
                //DataGridにデータを渡します
                dg1.dataProvider = event.result as ArrayCollection;
            }
        
            /** 
             * 失敗ハンドル。Java側の例外メッセージも表示されます。
             */
            public function faultHandler(event:FaultEvent):void {
                Alert.show(event.fault.message);
            }
            
            //DataGridのDepartmentカラムに値をバインドする
            private function departmentColumnLabelFunction(item:Object, column:DataGridColumn):String {
                return item.department.name;
            }
            
            //DataGridのAddressカラムに値をバインドする
            private function addressColumnLabelFunction(item:Object, column:DataGridColumn):String {
                return item.address.name;
            }
            
            //メッセージをサーバーから受信します。
            private function messageHandler(message:IMessage):void {
                var d:Date = new Date(message.timestamp);
                var formatter:DateFormatter = new DateFormatter();
                formatter.formatString = "YYYY/MM/DD JJ:NN:SS";
                update_news_area.text += formatter.format( d ) + " " + message.body.news + "\n";	
            }
            
        ]]>
    </mx:Script>
    
    <!-- 
          Consumerはメッセージ受信用のクラスです
          従業員情報登録Flexクライアントでメッセージをパブリッシュすると、
          messageHandlerが自動的に呼ばれます。
    -->
    <mx:Consumer id="consumer" destination="update_news" message="messageHandler(event.message)"/>
    
    <mx:RemoteObject id="srv" destination="employeeService">
        <mx:method name="findAll" result="resultHandler(event)" fault="faultHandler(event)" />
    </mx:RemoteObject>
 
    <mx:VBox>
        <mx:Label text="Tutorial: Employee List" width="80%" fontSize="26"/>
        <mx:DataGrid id="dg1" width="80%"  editable="false">
            <mx:columns>
                <mx:DataGridColumn headerText="Id" dataField="id"/>
                <mx:DataGridColumn headerText="Name" dataField="name"/>
                <mx:DataGridColumn headerText="JobType" dataField="jobType"/>
                <mx:DataGridColumn headerText="Salary" dataField="salary"/>
                <mx:DataGridColumn headerText="Department" labelFunction="departmentColumnLabelFunction"/>
                <mx:DataGridColumn headerText="Address" labelFunction="addressColumnLabelFunction"/>
            </mx:columns>
        </mx:DataGrid>
        <mx:Button label="再読込" click="show()"/>
        <mx:Spacer/>
        <mx:Label text="サーバーからのメッセージ表示領域です。" width="80%" fontSize="26"/>
        <mx:TextArea id="update_news_area" width="80%" fontSize="16"/>
    </mx:VBox>
</mx:Application>
Everything is expanded.Everything is shortened.
  1
 
applicationComplete="show();consumer.subscribe()"


添付ファイル: fileblaze_fms1_2.jpg 277件 [詳細] fileblaze_fms1_1.jpg 297件 [詳細]

リロード   新規 編集 凍結解除 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012-08-08 (水) 23:25:57 (2928d)