<?xml version="1.0" encoding="utf-8"?> <!-- * @author Wei Zhuo <weizho[at]gmail[dot]com> * @version $Id$ * @since 3.1 --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white" backgroundGradientAlphas="0" backgroundGradientColors="0" layout="vertical" creationComplete="initApp()"> <mx:states> <mx:State name="grid"> <mx:RemoveChild target="{form1}"/> <mx:AddChild relativeTo="{panel1}" position="lastChild"> <mx:HBox id="hbox1"> <mx:DataGrid id="list1" dataProvider="{addrSrv.getAllAddress.lastResult}" width="350" click="currentState='details'"> <mx:columns> <mx:DataGridColumn headerText="Name" width="175" dataField="username"/> <mx:DataGridColumn headerText="Phone" dataField="phone"/> </mx:columns> </mx:DataGrid> </mx:HBox> </mx:AddChild> <mx:SetProperty target="{button2}" name="visible" value="true"/> <mx:SetProperty target="{button3}" name="visible" value="true"/> <mx:SetProperty target="{controlbar1}" name="height"/> </mx:State> <mx:State name="details" basedOn="grid"> <mx:AddChild relativeTo="{hbox1}" position="lastChild"> <mx:Form> <mx:FormItem label="Name:"> <mx:TextInput id="_username" text="{list1.selectedItem.username}"/> </mx:FormItem> <mx:FormItem label="Phone:"> <mx:TextInput id="_phone" text="{list1.selectedItem.phone}" /> <mx:Button id="saveButton" label="Save" click="doSave()" /> </mx:FormItem> </mx:Form> </mx:AddChild> </mx:State> </mx:states> <mx:PhoneNumberValidator id="val1" source="{_phone}" property="text" /> <mx:StringValidator id="val2" source="{_username}" property="text" minLength="3" maxLength="20" /> <mx:Validator id="val3" source="{login_name}" property="text" /> <mx:Validator id="val4" source="{login_pass}" property="text" /> <mx:Validator id="val5" requiredFieldError="Username and password did not match!" /> <mx:WebService id="addrSrv" fault="dataError(event)"> <mx:operation name="saveAddress" result="addrSrv.getAllAddress()" /> <mx:operation name="deleteAddress" result="addrSrv.getAllAddress()" /> <mx:operation name="login" result="loginReturned(event)" /> </mx:WebService> <mx:Script> <![CDATA[ import mx.validators.Validator; import mx.utils.ArrayUtil; import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; [Bindable] private var addressList:ArrayCollection; private function initApp():void { addrSrv.loadWSDL(getAddressBookWsdl()); } private function getAddressBookWsdl():String { var appUrl:Object=application.parameters.wsdl; if(appUrl!=null) // running in PRADO page return appUrl.toString(); else // running in static html for debugging. return "http://127.0.0.1/prado-trunk/demos/address-book/index.php?soap=address-book.wsdl"; } private function dataError(event:FaultEvent):void { Alert.show(event.fault.faultString,"Data Communication Error"); } private function doSave():void { if(Validator.validateAll([val1, val2]).length == 0) { var data:Object = new Object; data.id = list1.selectedItem != null ? list1.selectedItem.id : -1; data.username = _username.text; data.phone = _phone.text; addrSrv.saveAddress(data); currentState='grid'; } } private function doDelete():void { addrSrv.deleteAddress(list1.selectedItem.id); currentState='grid'; } private function doLogin():void { if(Validator.validateAll([val3, val4]).length == 0) { addrSrv.login(login_name.text, login_pass.text); login_name.enabled=false; login_pass.enabled=false; progress1.visible=true; } } private function loginReturned(event:ResultEvent):void { if(!event.result) { login_name.enabled=true; login_pass.enabled=true; progress1.visible=false; Alert.show("Username and password did not match!", "Login Error"); } else { addrSrv.getAllAddress(); currentState='grid'; } } ]]> </mx:Script> <mx:Panel layout="vertical" title="Prado Address Book" id="panel1" resizeEffect="Resize"> <mx:Form id="form1"> <mx:FormItem label="Username:"> <mx:TextInput id="login_name" /> </mx:FormItem> <mx:FormItem label="Password:"> <mx:TextInput id="login_pass"/> </mx:FormItem> <mx:FormItem> <mx:Button label="Login" click="doLogin()" id="button1"/> </mx:FormItem> <mx:ProgressBar width="100%" indeterminate="true" id="progress1" showEffect="Fade" hideEffect="Fade" labelPlacement="center" label="Verifying..." color="#ffffff" visible="false"/> </mx:Form> <mx:ControlBar id="controlbar1" height="10"> <mx:Button label="New" click="list1.selectedIndex=-1; currentState='details'" visible="false" id="button2"/> <mx:Button label="Delete" enabled="{list1.selectedIndex >= 0}" click="doDelete()" visible="false" id="button3"/> </mx:ControlBar> </mx:Panel> </mx:Application>