InSync03:强类型
一、运行DEMO:
1、运行程序:http://localhost:8400/spring-flex-testdrive/insync03/index.html;
2、单击Search按钮,从数据库获取所有的联系人。
3、在Search文本框输入几个字符,单击“Search”按钮,按名字来查找联系人。
4、在DataGrid中选择一个联系人。
5、在联系人窗体中编辑该联系人,单击"Save"来保存修改。
二、理解代码:
1、insync03.mxml:
<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实例。