Flex&iBatis&Hibernate&Spring—師徒奶茶系統V1總結

    昨晚只睡了兩個小時來改進這個屬於我們“下午茶”師徒羣的同學們。主要是用Flex做前端,Java做後臺。其實整個系統搭建起來很容易,因爲Flex&Java應該說是我最熟悉的吧。爲了快速和友好的交互,當然還是用這個。不過這次比較傻的是,前幾天實現的用戶列表的增刪查改是用iBatis,主要原因是想基於以前一個簡單的測試項目,前面幾篇博文中有詳細的介紹。可是,昨晚抽風又想用Hibernate了。這樣就是說我需要兩個信道“AMF”和“RTMP”。所以就會出現一些問題。不過還好,最後發現問題應該是AMF信道的配置。Channel當時臨時寫在了客戶端代碼裏面。其實應該寫在一個properties或者xml文件中去讀取的。好了吧。廢話不多說。上代碼。首先是客戶端代碼。主要的AS:
 <mx:Script>
        <![CDATA[
        	import mx.controls.DateField;
        	import control.print.FormPrintView;
        	import mx.managers.PopUpManager;
        	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;
            import control.showGoods;
            import mx.printing.PrintDataGrid;
			import mx.printing.FlexPrintJob;
			import control.*;
			
			
            [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;
            	note.text=userdg.selectedItem.note;
            }
            
            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 getUsersByQuery_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;
             	 myUser.note=note.text;
             	 user.insertUser(myUser);
             	 Alert.show("save a user named : "+userName.text,"SAVE!");
            }
            
            private function clearTexts():void{
            	userName.text='';
            	password.text='';
            	company.text='';
            	note.text='';
            }
            
            
            private function updateUser():void{
                 var uu:User=userdg.selectedItem as User;
            	 uu.username=userName.text;
             	 uu.password=password.text;
             	 uu.company=company.text;
             	 uu.note=note.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");
            }
            
            public function doPrint():void {

	           var printJob:FlexPrintJob = new FlexPrintJob();
	           if (printJob.start()) {
	               var thePrintView:FormPrintView= new FormPrintView();
	               Application.application.addChild(thePrintView);
	
	               thePrintView.width=printJob.pageWidth;
	               thePrintView.height=printJob.pageHeight;
	               thePrintView.myDataGrid.dataProvider=userdg.dataProvider;
	               thePrintView.showPage("single");
	               if(!thePrintView.myDataGrid.validNextPage)
	               {
	                   printJob.addObject(thePrintView);
	               }
	               else
	               {
	                   thePrintView.showPage("first");
	                   printJob.addObject(thePrintView);
	                   thePrintView.pageNumber++;
	                   while(true)
	                   {
	                       thePrintView.myDataGrid.nextPage();
	                       thePrintView.showPage("last");
	                       if(!thePrintView.myDataGrid.validNextPage)
	                       {
	                           printJob.addObject(thePrintView);
	                           break;
	                       }
	                       else
	                       {
	                           thePrintView.showPage("middle");
	                           printJob.addObject(thePrintView);
	                           thePrintView.pageNumber++;
	                       }
	                   }
	               }
	               Application.application.removeChild(thePrintView);
	           }
	           printJob.send();
       }
		
            
           
        ]]>
    </mx:Script>





AS一如往常,木有什麼特別。下面是遠程調用的RemoteObject 調用實現:
 <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>



後面就是一些界面代碼,沒有太大參考價值,這裏把圖貼出來吧。




以上是ibatis和Spring的部分。下面是Hibernate。用了LCDS的data-management.重要的客戶端代碼是這一行:
<mx:DataService id="hib_good" destination="hibernate_goods" autoCommit="true" />

另外,關鍵的配置在客戶端的data-management-config.xml裏面:
<?xml version="1.0" encoding="UTF-8"?>
<service id="data-service" 
    class="flex.data.DataService">

    <adapters>
        <adapter-definition id="actionscript" class="flex.data.adapters.ASObjectAdapter" default="true"/>
        <adapter-definition id="java-dao" class="flex.data.adapters.JavaAdapter"/>
    </adapters>

	<default-channels>
        <channel ref="my-rtmp"/>
    </default-channels>
    
     <destination id="hibernate_goods">
		<adapter ref="java-dao" />
		<properties>
			<use-transactions>true</use-transactions>
			<source>flex.data.assemblers.HibernateAssembler</source>
			<scope>application</scope>
			<metadata>
				<identity property="id" />
			</metadata>

			<network>
				<paging enabled="false" pageSize="10" />
				<throttle-inbound policy="ERROR" max-frequency="500" />

			</network>
			<server>
				<fill-method>
					<name>fill</name>
					<params>java.util.List</params>
				</fill-method>
				<hibernate-entity>com.qiyun.spritis.pojo.Goods</hibernate-entity>

				<update-conflict-mode>property</update-conflict-mode>
				<delete-conflict-mode>object</delete-conflict-mode>
				<fill-configuration>
					<use-query-cache>false</use-query-cache>
					<allow-hql-queries>true</allow-hql-queries>
				</fill-configuration>
			</server>
		</properties>
	</destination>
</service>




hibernate部分列表的頁面圖片如下:





到這裏就差不多了。Java代碼很簡單,沒有複雜的邏輯。這個就是5個小時做出來的師徒奶茶訂閱系統。以後和徒兒們一起喝奶茶就可以用這個了。Flex的魅力是無窮的,不過最近在學習JS和CSS還有些前端的東西。後續一點點分享出來吧。

  • 大小: 49.3 KB
  • 大小: 102.5 KB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章