InSync03:強型別
一、運行DEMO:
1、運行程式:http://localhost:8400/spring-flex-testdrive/insync03/index.html;
2、單擊Search按鈕,從資料庫擷取所有的連絡人。
3、在Search文字框輸入幾個字元,單擊“Search”按鈕,按名字來尋找連絡人。
4、在DataGrid中選擇一個連絡人。
5、在連絡人表單中編輯該連絡人,單擊"Save"來儲存修改。
二、理解代碼:
1、insync03.mxml:
選擇DataGrid裡的連絡人後,將會更新ContactForm的contact屬性,ContactForm的控制項值會自動更新。
<local:ContactForm contact="{dg.selectedItem as Contact}" width="70%" height="100%"/>
2、ContactForm.mxml:
該表單上的控制項用於顯示contact的資訊,contact成員變數用於控制項綁定。
[Bindable] public var contact:Contact;
儲存和刪除的按鈕,分別調用RemoteObject的方法,ro.update(contact)和ro.remove(contact);
也捕獲了遠程調用後觸發的事件。
<mx:RemoteObject id="ro" destination="contactService" fault="faultHandler(event)" endpoint="http://localhost:8400/spring-flex-testdrive/messagebroker/amf">
<mx:method name="update" result="update_resultHandler(event)"/>
<mx:method name="remove" result="remove_resultHandler(event)"/>
</mx:RemoteObject>
3、Contact.as
該類是FLASH裡的AS類,Contact類只是定義了一些公用的成員變數。重要的是遠程類的標註。這個類用於與遠端JAVA類進行映射。
[Bindable]
[RemoteClass(alias="org.springframework.flex.samples.contact.Contact")]
4、Contact.java:
該類位於服務端,Contact要實現Serializable,用於與FLASH中的AS類進行序列化/還原序列化。而實現序列化,定義serialVersionUID成員變數即可。
static final long serialVersionUID = 103844514947365244L;
還有各私人屬性的get/set公開方法。
5、更新/刪除操作
在前台的ContactForm裡,ro.update(contact)或ro.remove(contact)後,FLASH裡的contact執行個體會被序列化,然後傳送到服務端,進行還原序列化後,變成可供JAVA應用操作的JAVA執行個體。
contactDAO bean的更新和刪除方法是:
public boolean update(Contact contact) {
int count = this.template.update(
"UPDATE contact SET first_name=?, last_name=?, address=?, city=?, state=?, zip=?, phone=?, email=? WHERE id=?", contact.getFirstName(),
contact.getLastName(), contact.getAddress(), contact.getCity(), contact.getState(), contact.getZip(), contact.getPhone(),
contact.getEmail(), contact.getId());
return count == 1;
}
public boolean remove(Contact contact) {
int count = this.template.update("DELETE FROM contact WHERE id=?", contact.getId());
return count == 1;
}
三、小結:
在本DEMO中,使用強型別的contact對象。Contact是AS類,它代表org.springframework.flex.samples.contact.Contact Java類。這個映射過程要求AS中定義類時使用標註來定義其對應的遠程類,而遠程類要實現序列化的介面。
如Contact.as中的[RemoteClass(alias="org.springframework.flex.spring.samples.contact.Contact")] 標註用來指出Contact AS執行個體發送到伺服器被反序列為org.springframework.flex.spring.samples.contact.Contact服務端的Java執行個體,同樣的,從伺服器上接收的org.springframework.flex.spring.samples.contact.Contact
Java執行個體將被反序列為Contact AS執行個體。