案例学习BlazeDS+Spring之五InSync03强类型

来源:互联网 发布:网络男女歌手唱的歌 编辑:程序博客网 时间:2024/05/16 08:57
 

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实例。

来自:http://blog.sina.com.cn/s/blog_67532f7c0100oqsj.html

原创粉丝点击