Flex與Java,XML

  from: http://yangzhiwen911.javaeye.com/blog/158255 關鍵字: flex
最近一直在做有關JSP開發的網站,重複的登陸驗證頁面,重複的語法以及重複的跳轉頁面,熟悉的不能再熟悉的struts構建流程。
做項目的期間,還自己學習了HIBERNATE,ajax,等等
所以在寫JSP代碼的同時,也考慮到了JSP可以不可以和特效結合起來,於是在工作完成的時候,自己會去看一些flex的東西,很有好的界面,很炫的組件,真是被flex所深深吸引。
1. Flex結合tomcat
Flex只是個運行庫或者說是web application,用來處理mxml類型的文件,其運行庫就是Flex.war,所以它可以部署到任何一個兼容的jsp服務器上:比如 Tomcat, weblogic、websphere、Jrun,Jboss等,而Coldfusion目前也是運行庫或者說是web application,用來處理cfml類型的文件,其運行庫就是cfusion.war,所謂standalone版本的coldfusion只是把 jrun和cfusion.war一起打包安裝而已,所以就沒有Flex和Coldfusion結合之說了。
所以要想tomcat做flex的服務器,很簡單的說安裝完Flex Dada Services,目前名字叫Adobe_LiveCycle_Data_Services,我本人安裝的版本是 (Adobe_LiveCycle_Data_Services_ES_2.5.1)
需要的話可以共享給大家,你也可以自己去下載,下載完不用去找序列號,因爲我差了半天也沒查到,默認可以有60天的試用期。
下一步需要做的就是把flex項目下的flex.war和samples.war拷貝到tomcat下的webapp目錄裏,考完後, tomcat會自動部署文件,不需操作,這樣輸入項目路徑 : http://localhost:8080/samples 就可以看到裏面的flex程序了,就是這麼簡單。
2.FLEX結合JSP
其實flex裏夾雜了ajax異步調用的技術,因爲本身ACTIONSCRIPT就和JAVASCRIPT有着異曲同工之妙。我做了一個例子是參 考手冊上面的,不過自己改了一下,大概的程序就是這樣的,首頁當然是flex服務器來解析hxml,然後後臺通過jsp文件交互數據庫,然後把數據動態的 封裝成xml格式,最後在把xml標籤與flex程序綁定在一起,就可以了。 這樣當運行flex前端程序的時候,後臺就會把綁定好的數據顯示到了flex的組件裏,看起來很有成就感。哈哈。。。。。。

我的mxml代碼:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="feedRequest.send()" backgroundGradientColors="[#000000, #000000]">
<mx:HTTPService id="feedRequest" url="http://localhost:8080/test/index.jsp" useProxy="false">
<mx:request xmlns="">
<directory>{test.text}</directory>
</mx:request>
</mx:HTTPService>

<mx:Panel id="blog" width="359" height="520" title="{feedRequest.lastResult.rss.channel.title}" verticalCenter="188.5" horizontalCenter="179">
<mx:DataGrid id="dgPosts" dataProvider="{feedRequest.lastResult.rss.channel.item}" width="340" height="167">
<mx:columns>
<mx:DataGridColumn headerText="題目" dataField="title"/>
<mx:DataGridColumn headerText="路徑" dataField="url"/>
</mx:columns>
</mx:DataGrid>
<mx:TextArea width="388" height="129" htmlText="{dgPosts.selectedItem.description}"/>
<mx:LinkButton label="查看詳細" click="navigateToURL(new URLRequest(dgPosts.selectedItem.url));"/>

<mx:Label text="選擇ID號" />
<mx:TextInput id="test" width="115" height="23"/>
<mx:Label text="{test.text}" />
<mx:Button label="登陸" id="Submit" click="feedRequest.send();"/>
</mx:Panel>
<mx:Image width="717" height="151" top="31" horizontalCenter="0">
<mx:source>file:///C|/Documents and Settings/Administrator/桌面/banner.gif</mx:source>
</mx:Image>
<mx:MenuBar x="188" y="203" width="539" height="45"></mx:MenuBar>
</mx:Application>
註釋:
(1).application裏creationComplete="feedRequest.send()" 這一屬性是每次程序運行時,調用httpservice 裏的Send()方法,在這個程序裏實際上是請求http://localhost:8080/test/index.jsp,
把得到的數據以xml形式返回,把內容綁定到DataGrid 的組件上,flex是這樣來綁定的:

(2).dataProvider="{feedRequest.lastResult.rss.channel.item}" 此句的語法,應該是,得到最後的返回結果,按照rss,channel,item此三層標籤去綁定所遍歷的數據,
<mx:columns>
<mx:DataGridColumn headerText="題目" dataField="title"/>
<mx:DataGridColumn headerText="路徑" dataField="url"/>
</mx:columns>
以上代碼就是創建分別叫題目和路徑的2個列,title和url即爲遍歷出來的信息源標籤。
(3).click="navigateToURL(new URLRequest(dgPosts.selectedItem.url));" linkbutton的屬性,強調一點的是dgPosts是datagrid中所產生的選項,而navigateToURL(new URLRequest(url))此句就是另外打開一個url。

3. Flex 和數據庫MYSQL(目前公司用的MYSQL)
這個時候可能有的人要問了,flex如何傳值呢? 後臺怎麼接收有FLEX界面提交的值呢?
帶着這個問題,讓我們進入下個簡單的程序:
先寫一個簡單的flex組件,代碼如下
<mx:Label x="10" y="10" text="用戶名" id="label1"/>
<mx:TextInput x="53" y="8" id="username"/>
<mx:Label x="10" y="66" text="密碼" id="label2"/>
<mx:TextInput x="55" y="64" id="password" displayAsPassword="true"/>
<mx:Button x="55" y="113" label="登陸" id="Submit" click="login_user.send();"/>
這就是一個基本的用戶交互界面,做完特效可以變成如下界面:


這個時候需要注意的是數據綁定,
數據的綁定也是通過FLEX標籤來定義的。。

<mx:HTTPService id="login_user" result="checkLogin(event)" showBusyCursor="true" method="POST" url="http://localhost:8080/test/MyJsp.jsp" useProxy="false">
<mx:request xmlns="">
<username>
{username.text}
</username>
<password>
{password.text}
</password>



</mx:request>
</mx:HTTPService>

這個代碼說明了,我本地項目的MyJsp.jsp會去接受此控件傳過來的值,之前我測試是否接收到了FLEX傳值的時候,是這樣測試的 :
在MyJsp.jsp頁面打印
<% out.println(“success”); %>

結果半天就沒看到jsp頁面輸出成功信息。


後來經過MSN裏探討,原來flex本身就有着異步調用的過程,所以它不會顯示JSP頁面的內容,

呵呵,,原來是這樣,,浪費我半天的時間,還以爲程序錯誤呢。。很感謝他。。

這樣以來,我在jsp頁面 直接打印
<% System.out.println(username); %>
<% System.out.println(password); %>

這樣在後臺就打印出來了 username 和 password;

所以,可以得到了flex 頁面傳來的數據,這樣後臺就完全可以用 jsp 或者 struts 等來實現和數據庫的交互過程。

看來flex入門真是不容易啊。。如果沒有人引路,估計我還自己停留在某一個地方,原地不動呢,
所以總體看來,程序都是相同的,高人的指點也是必須的,呵呵
以上內容都是我自己總結的,希望能相互學習。。呵呵




4. flex 和 xml
以下內容 是我查資料時候看到的,代碼可以直接用,很快捷。。。。。。。

其實很久以前我就有過用Flash動態生成xml菜單的想法,可是…(種種原因)…沒實現,當時非常不甘心。
現在有Flex了,我又想把xml菜單做一下,昨天搞了一天,終於小有成果,就來和大家分享一下,我認爲代碼其實寫的不好,因爲我是從網上七拼八湊拿來的代碼,好的是一種思路,‘拖動式的思路’(暫且用這個詞吧)
代碼說明:主要代碼段都在Panel組件裏,而在Panel裏Tree的作用 舉足輕重,Tree的功能很強大,在內部就拖動根節點和葉節點,任意拖動節點就免去了代碼實現節點們順序的問題,我當時就被它這點折服了,還又個垃圾箱, 你可以將根節點或葉節點拖到垃圾箱裏,這樣也免去了刪除節點的麻煩,我其實就只完成了個增加節點的功能,並且還只是在最後增加節點(不過由於其天生可拖動 性,我這樣就完全可以了,你可以把生成的最後節點拖到想要的位置啊!!)。好了,我也不多說了,取之於網民,給之於網民,代碼和大體效果下面都有,(裏面 又很多效果,希望你都理解!畢竟flex太強大了)Enjoy it!!
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.collections.XMLListCollection;

[Bindable]
var companyList:XMLListCollection=new XMLListCollection();

private function addFolder():void
{
var newNode:XML = <node label="單擊此處修改" url="" isBranch="true">
<node label="單擊此處修改" url=""/>
</node>;
companyList.addItem(newNode);
}

private function addLeaf():void
{
var newNode:XML =<node label="單擊此處修改" url=""/>
companyList.addItem(newNode);
}

]]>
</mx:Script>

<mx:Panel id="panel" width="500" height="450" layout="absolute" horizontalCenter="-1" verticalCenter="0" title="修改Lebel">

<mx:Tree id="XmlTree" width="282" height="223" x="0" showRoot="false" editable="true"
dataProvider="{companyList}" labelField="@label" dragEnabled="true" dropEnabled="true"/>

<mx:Tree id="DirtyTree" width="75" height="25" x="302" showRoot="false" dropEnabled="true" y="198"/>

<mx:Button x="96" y="231" label="Creater Xml"
click="txt.text=''+XmlTree.dataProvider;menu.dataProvider=XmlTree.dataProvider;menu.labelField='@label'"/>
<mx:TextArea id="txt" x="0" y="261" width="100%" height="127"/>
<mx:Button x="290" y="71" label="Add Folder" click="addFolder()" width="97"/>
<mx:Button x="290" y="118" label="Add Leaf" width="97" click="addLeaf()"/>

<mx:ComboBox x="290" y="19" id="cobox"
dataProvider="{[{label:'修改Label', data:'@label'}, {label:'修改Url', data:'@url'}]}"
change="XmlTree.labelField=cobox.selectedItem.data;panel.title=cobox.selectedLabel">
</mx:ComboBox>
<mx:Label x="324" y="172" text="垃圾箱" width="35" textAlign="center"/>


</mx:Panel>
<mx:MenuBar id="menu" y="97" horizontalCenter="0">
</mx:MenuBar>

</mx:Application>

因爲不是我寫的,所以沒有註釋,關鍵是體會到了Flex強大,不過是就太佔資源了,哎,,,如果有兩全其美的本法該有多好啊。。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章