iBATIS&Spring合奏(二)--Flex前端融合
iBatis和Spring的进度依然如昨。回馈社区的时间到了,今天是Flex的时间。以前用Java+Flex做一般用LCDS的dataservice组件,其实就是偷懒。因为最近研究了下Spring+iBATIS,也是出于项目需要,决定勤奋一回,用LCDS的RPC服务吧。RPC在FlexLCDS中支持三种服务——WebService,HttpService以及本文用的RemotingObject。LCDS官方文档是一手资料,虽然没人翻译,依然一个人孤独和单词作战到底吧。依然用比较清晰的思路和模式为童鞋们呈现集成环境下开发一下简单web程序的过程。另,最近总是看到分布式之类的讨论,RPC也是一种分布式技术啊,后面再加上SpringAOP中管理MemCache也蛮好。不多扯了,越扯越跑题……
1)前面的可以参看上一篇文章。这里要注意的是搭建集成环境myeclipse+flexbuilder。为了大家不走弯路,myeclipse7.0以后不支持Flex插件啦,可以下载插件版的flexbuilder也可以。我用的是老版(myeclipse6.5+flexbuilder3.0)若说,不用什么集成开发环境也一样,只是懒得开两个编译器,反正都是Web程序,都要部署滴嘛。tomcat6.x。spring,ibatis随便啦。
2)配置RemotingObject——remoting-config.xml如下:
<?xml version="1.0" encoding="UTF-8"?><service id="remoting-service"/></adapters><default-channels><channel ref="my-amf"/></default-channels><destination id="userservice"><properties><source>com.qiyun.spritis.service.UserService</source><scope>application</scope></properties></destination></service>
package vo{[Bindable][RemoteClass(alias="com.qiyun.spritis.pojo.User")]public class User{public function User(){}public var id:int;public var username:String;public var password:String;public var company:String;}}
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundGradientColors="[0x000000,0x323232]" > <mx:Script> <![CDATA[ import vo.User; import mx.collections.ArrayCollection; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; import mx.utils.ArrayUtil; import mx.controls.Alert; [Bindable] private var users:ArrayCollection; [Bindable] private var myUser:User=new User(); private function selectedDGrid():void{ userName.text=userdg.selectedItem.username; password.text=userdg.selectedItem.password; company.text=userdg.selectedItem.company; } private function getAllUsers_resultHandler(event:ResultEvent):void { users = event.result as ArrayCollection; } private function getUserByCompanyName_resultHandler(event:ResultEvent):void { users = event.result as ArrayCollection; } private function insertUser():void{ myUser.username=userName.text; myUser.password=password.text; myUser.company=company.text; user.insertUser(myUser); Alert.show("save a user named : "+userName.text,"SAVE!"); } private function updateUser():void{ var uu:User=userdg.selectedItem as User; uu.username=userName.text; uu.password=password.text; uu.company=company.text; user.updateUser(uu); Alert.show("update a user!","UPDATE!"); } private function deleteUser():void{ user.deleteUser(userdg.selectedItem.id); Alert.show("delete a user named : "+userdg.selectedItem.username,"DELETE!"); } private function faultHandler(event:FaultEvent):void { Alert.show(event.fault.faultString, "Error"); } ]]> </mx:Script> <mx:RemoteObject id="user" destination="userservice" channelSet="{channelSet}" fault="faultHandler(event)" source="com.qiyun.spritis.pojo.User"> <mx:method name="getAllUsers" result="getAllUsers_resultHandler(event)"/> <mx:method name="getUserByCompanyName" result="getUserByCompanyName_resultHandler(event)"> <mx:arguments> <arg1> {companies.selectedItem.data}</arg1> </mx:arguments> </mx:method> <mx:method name="updateUser" > <mx:arguments> <arg1> {myUser} </arg1> </mx:arguments> </mx:method> <mx:method name="insertUser"> <mx:arguments> <arg1> {myUser} </arg1> </mx:arguments> </mx:method> <mx:method name="deleteUser" > <mx:arguments> <arg1> {userdg.selectedItem.id} </arg1> </mx:arguments> </mx:method> </mx:RemoteObject> <mx:ChannelSet id="channelSet"> <mx:AMFChannel id="amfChannel" url="http://localhost:8080/spritis/messagebroker/amf" /> </mx:ChannelSet> <mx:DataGrid id="userdg" itemClick="selectedDGrid()" editable="false" dataProvider="{users}" width="100%" height="100%"> <mx:columns > <mx:DataGridColumn dataField="id" headerText="id"/> <mx:DataGridColumn dataField="username" headerText="username"/> <mx:DataGridColumn dataField="password" headerText="password"/> <mx:DataGridColumn dataField="company" headerText="company" textAlign="right"/> </mx:columns> </mx:DataGrid><mx:HBox> <mx:Button label="Get All Users" click="user.getAllUsers()"/> <mx:Button label="Get User By CompanyName" click="user.getUserByCompanyName(companies.selectedItem.data);"/> <mx:ComboBox id="companies" width="150" text="company" > <mx:dataProvider> <mx:ArrayCollection> <mx:source> <mx:Object label="TB" data="TB"/> <mx:Object label="IBM" data="IBM"/> <mx:Object label="alibaba" data="alibaba"/> <mx:Object label="MS" data="MS"/> <mx:Object label="TX" data="TX"/> </mx:source> </mx:ArrayCollection> </mx:dataProvider> </mx:ComboBox> </mx:HBox> <mx:Panel title="Add User" > <mx:Form id="myForm" color="black" > <mx:FormItem label="username:"> <mx:TextInput id="userName" width="100"/> </mx:FormItem> <mx:FormItem label="password:"> <mx:TextInput id="password" color="black" width="100" /> </mx:FormItem> <mx:FormItem label="company:"> <mx:TextInput id="company" width="100" /> </mx:FormItem> <mx:HBox> <mx:Button label="clear" click="userName.text='';password.text='';company.text=''"/> <mx:Button label="Save" click="insertUser();user.getAllUsers()"/> <mx:Button label="Delete" click="deleteUser();user.getAllUsers()"/> <mx:Button label="Update" click="updateUser();user.getAllUsers()"/> </mx:HBox> </mx:Form> </mx:Panel> </mx:Application>