`

对一个 Remote Object 的理解

    博客分类:
  • flex
阅读更多

http://www.blogjava.net/19851985lili/articles/99128.html

对于大型的应用程序, MM 及一些志同道合者,都认为和后台的数据交换应该采用 RO 的方式,因为这种方式更强大。

 

MM 提供的实例程序中就有这样一个:文件的结构是这样的:

 

1. 一个 mxml 文件: EDRemoteObject.mxml

它里面导入了两个 as 类,分别是 EmployeeVO.as PhoneNumberVO.as ,这两个类存放在当前目录的 samples\data 子目录下,因此在 mxml 文件中要导入这两个类的包。因此在 script 中有代码: import samples.data.*;

声明 RemoteObject ,代码如下:

 

<mx:RemoteObject id="srv" source="samples.data.EmployeeService">

    <mx:method name="addEmployee"/>

</mx:RemoteObject>

对代码的说明, source 是指对应的在 samples\WEB-INF\classes\samples\data 下的 java 类(也就是 EmployeeService.class 文件)。

 

 

 

2. EmployeeVO.as 的理解:

 

EmployeeVO.as 中有这样一行代码:

 

static var registered=

Object.registerClass("samples.data.EmployeeVO", samples.data.EmployeeVO);

该行代码声明的是一个类的映射( class mapping ),括号中前一部分是 Java 类,后一个部分是 as 类。

 

注意的是: java as 的类名必须严格一致; java as 类的数据类型必须严格一致;另外,包的名称不是必须一致,但是推荐包名也保持一致。

 

3. java 文件的理解:

 

Java 文件和相对应的 class 文件存放的目录是 samples\WEB-INF\classes\samples\data ;分别是 EmployeeService.java EmployeeVO.java PhoneNumberVO.java ,以及相对应的 class 文件。

 

Java 文件的理解不是很难,这里不再一一赘述了。但是值得注意的是,根据 MM 提供的源代码,程序的输出结果似乎是不可理解的,正要考虑是不是调用了别的什么函数。突然想到,可以反编译 class 得到 java 文件。于是反编译,果然, MM 提供的源代码中有部分的删节。反编译的 java 文件放在了 samples\WEB-INF\classes\samples\data\java bak 下面, EmployeeService.java 的代码里面还有一小部分尚未完全理解,有待进一步探讨。见另一篇文章:一个Remote Object的实例应用(从java到Flex)。

 

另外,本应用程序支持中文的输入,不需要作任何的改动。

 

以这个程序作为蓝本,对 Flex 和数据库的连接应该是很有帮助的。

 

一个Remote Object的应用程序(从java到flex传送数据)

 

昨天对 MM 提供的源代码中的关于 Remote Objecet 的一个应用程序,做了深刻的分析。剩下了一个小问题就是,对 samples\WEB-INF\classes\samples\data 下的 EmployeeService.java (由 class 反编译得到的)文件中的一个方法,不是很理解,代码如下:

 

public List getEmployeeList()

    {

        DateFormat df = new SimpleDateFormat("mm/dd/yyyy");

        ArrayList list = new ArrayList();

        try

        {

            list.add(new EmployeeVO("Walter", "Mellon", 46000, df.parse("1/20/2001")));

…………

 

        }

        catch(ParseException e)

        {

            e.printStackTrace();

        }

        return list;

    }

今天研究了一下,这个方法是向 flex 前台传送数据的,返回值的类型是 list

 

上网参照网友的例子,并参照 EDRemoteObject.mxml ,写了一个自己的应用程序。

 

程序源代码放在了 \samples\My_Examples\complexdata 文件夹下,文件名字 EDRemoteObjectRec.mxml

 

在这个应用程序中,定义了一个 Remote Object ,代码如下:

 

    <mx:RemoteObject id="srv" source="samples.data.EmployeeService"

                          result="datagrid.dataProvider=event.result"

                          fault="alert(event.fault.faultstring, 'RemoteObject Error')">

        <mx:method name="getEmployeeList"/>

    </mx:RemoteObject>

其他的部分不再赘述。需要注意的是 result="datagrid.dataProvider=event.result" ,正是它定义了 datagrid dataProvider

 

然后是一个显示结果的 datagrid ,不再赘述。

 

其实,这个应用很简单。


有很多朋友都问如何在flex中的2ge"窗体"(以下我也这么称呼)之间进行调用和传递参数
下面我就给大家讲解一下
1. 调用窗体
A 窗体是一个applicaton窗体 B 窗体是自定义窗体(类似Dialog之类的窗体,本身并不能独立运行)
A 窗体 片断代码如下:
.............
.............
<mx:Script><![CDATA[

  import mx.containers.TitleWindow;
  import mx.managers.PopUpManager;
    
  function ShowDetailDialog(){
    var oInitObj:Object = new Object();
    oInitObj.title = "FX-Blog Details";
    oInitObj.width = 400;
    oInitObj.height = 480;
    oInitObj.x = 350;
    oInitObj.mainApp = this;
    oInitObj.strDetailTitle = "aaa" ;
    oInitObj.strDetailDetails = "bbb" ;
    var DetailsDialogInstance:Object =
        TitleWindow(PopUpManager.createPopUp(_root, B , true, oInitObj, false))
  }
]]></mx:Script>
<mx:Button label="Click" click="ShowDetailDialog()" width="61"/>  
------------------
B 窗体 片断代码如下:
.............
.............
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.macromedia.com/2003/mxml"
    closeButton="true"
    click="this.deletePopUp();"
    alpha="50" initialize="initComponent()">
<mx:Script><![CDATA[
  public var mainApp:index = null;
  public var strDetailTitle :String;
  public var strDetailDetails :String;
  }
]]></mx:Script>
<mx:TextArea" text="{strDetailTitle}" editable="false" width="100%" alpha="0" height="240" vScrollPolicy="auto"/>
<mx:TextArea" text="{strDetailDetails}" editable="false" width="100%" alpha="0" height="240" vScrollPolicy="auto"/>
</mx:TitleWindow>
--------------
以 上,当在A 窗体点击button的时候,触发Click event 然后调用ShowDetailDialog这个function,在这个function中红色的字体是必须要注意的,其中strDetailTitle 和strDetailDetails 这个2个变量就是要传递参数的变量和B 窗体中的strDetailTitle 和strDetailDetails 必须一致,否则flex中不认哦,这样当点击button后,就会调用B 窗体 并且把strDetailTitle 和strDetailDetails 传递到B 窗体的 textArea中了,其中var DetailsDialogInstance:Object = TitleWindow(PopUpManager.createPopUp(_root, B , true, oInitObj, false)这个代码中的B一定要和A在同一个文件夹中,并且名字和和B的外部名称一致,否则也会失败的!

分享到:
评论

相关推荐

    Qt Remote Object(QtRO)动态Replica实现进程间通信Demo

    1. **定义Remote接口**:首先,我们需要定义一个QMetaObject兼容的类,该类包含了我们想要在进程间共享的方法和属性。使用`Q_OBJECT`宏声明MetaObject,并为每个需要共享的方法和属性添加信号和槽。 2. **创建...

    qt RemoteObjects 示例

    Qt RemoteObjects是Qt框架中的一个高级特性,它允许在不同进程甚至不同设备之间进行对象通信。这个技术基于Qt的信号和槽机制,使得分布式系统开发变得更加简单和高效。本示例将详细介绍如何使用Qt RemoteObjects,...

    RemoteObjects-VS2015-DemoQtRO

    RemoteObjects-VS2015-DemoQtRO 是一个针对Visual Studio 2015的示例项目,展示了如何在C++环境中利用Remote Objects技术与Qt的QtRO库进行远程对象交互。这个项目包含了配置、编译和运行的全部要素,帮助开发者了解...

    C#2005 Remote示例

    4. **激活和暴露远程对象(Activation and Exposing the Remote Object)**:在服务器端,我们需要激活一个`RemoteCalculator`实例,并将其注册到服务器的应用程序域中,以便通过选定的通道进行访问。 5. **客户端...

    TMS RemoteDB 1.13 Full Source.zip

    在标题"TMS RemoteDB 1.13 Full Source.zip"中,我们了解到这是TMS RemoteDB的一个完整源代码版本,版本号为1.13。这通常意味着开发者或学习者可以深入理解其内部工作原理,并根据需求进行自定义修改。 描述中的...

    Object based image analysis for remote sensing.pdf

    图像分割是一种将图像划分成若干区域的技术,每个区域代表一个可能的物体或地物类型。这一过程通常基于相似性的度量,如颜色、纹理和形状等特征,将相邻且具有相似特性的像素聚类为同一区域,进而形成具有物理意义的...

    java remote远程调用对象方法

    RMI是Java平台的一个核心特性,它极大地简化了分布式计算。 在Java RMI中,远程对象是实现了特定接口的类的实例,这个接口被称为远程接口(Remote Interface)。远程接口必须扩展Java的`java.rmi.Remote`接口,并...

    Android高手进阶教程

    对于新手来说,这是一个非常实用的功能,可以帮助管理开发环境中的各种资源。 #### 2. `android list avds` 此命令用于列出当前系统中所有已创建的Android模拟器(AVDs)。这对于需要快速查看或选择特定模拟器的场景...

    代理模式Remote Proxies(三、RMI)

    代理模式在软件设计中是一种常用的设计模式,它允许我们为一个对象提供一个替代品或占位符,以便控制对真实对象的访问。在远程方法调用(Remote Method Invocation,RMI)场景下,代理模式的应用尤为突出。RMI是Java...

    TMS_RemoteDB_1.9.1_Downloadly.ir.rar

    【TMS RemoteDB 1.9.1】是一款由TMS Software公司开发的数据库组件套件,主要用于在Delphi编程环境中实现远程...如果你正在寻找一个可靠的解决方案来处理跨设备的数据交换,那么TMS RemoteDB无疑是一个值得考虑的工具。

    Remote Call Function库

    RCF库是CORBA(Common Object Request Broker Architecture)的一个轻量级实现,它提供了一种高效、易于使用的方式来在不同的进程中或跨网络进行对象方法的调用。 **RCF库的核心概念:** 1. **远程接口(Remote ...

    remote_node_context.rar_remote

    在IT行业中,远程节点上下文(Remote Node Context)是一个关键概念,特别是在分布式系统、网络编程以及云计算环境中。本文将深入探讨远程节点上下文对象的状态及其重要性,同时也会提及与之相关的`remote_node_...

    Dektec Remote Access API

    StreamXpress是一个多格式视频流处理平台,广泛应用于广播和多媒体行业。它支持多种视频标准,包括MPEG-TS、DV、VBI等,并提供高精度的时钟恢复以及支持多通道同步输出。 Dektec的远程控制API是基于SOAP(Simple ...

    RMI.rar_remote

    远程方法调用(Remote Method Invocation,RMI)是Java编程语言中的一种机制,它允许一个对象的方法被运行在不同JVM(Java Virtual Machine)上的另一个对象调用。这个标题"RMI.rar_remote"暗示了这是一个关于Java ...

    Qt remote objects 简单跨进程读写文件示例

    5. **连接到服务器**:在客户端,创建一个`QtRemoteObjects::TargetNode`,它代表了对服务器的连接。使用`QtRemoteObjects::QNodClient`连接到服务器的地址。 6. **获取远程对象引用**:客户端可以通过目标节点的`...

    RMI.zip_remote

    远程方法调用(RMI,Remote Method Invocation)是Java编程语言中的一种机制,它允许一个对象的方法被另一个网络上的对象调用,实现了分布式计算。在Java中,RMI是Java平台的一部分,它使得开发者可以创建分布式系统...

    afxCodeHook_remote_delphi_

    标题“afxCodeHook_remote_delphi_”涉及到的是一个与远程代码执行相关的技术,特别是与Delphi编程语言的高级实现有关。远程代码执行是指在一台计算机上执行由另一台计算机生成或传输的代码的能力,这在某些场景下...

    delphi_remote.rar_remote

    标题中的"delphi_remote.rar_remote"表明这是一个使用Delphi编程语言编写的远程控制软件的源代码,主要功能是实现远程计算机的截图。Delphi是一种基于Object Pascal的集成开发环境(IDE),广泛用于创建Windows应用...

Global site tag (gtag.js) - Google Analytics