网络编程

smartinvoke入门系列4——Java与Flex传递复杂类型

发布制作:admin  发布日期:2011/6/8
Flex调用Java方法时,不仅可以传递基本数据类型,而且可以传递自定义复杂的数据类型。在这里我们把这种类型称作Bean Class Type,它的作用类似于J2EE里的Bean Class,只起着组织复杂数据的作用。
eclipse 工具栏上点击

在Flex调用Java方法时,不仅可以传递基本数据类型,而且可以传递自定义复杂的数据类型。在这里我们把这种类型称作Bean Class Type,它的作用类似于J2EE里的Bean Class,只起着组织复杂数据的作用。

package cn.first; import cn.smartinvoke.ide.declare.ABeanType; @ABeanType public class BeanTest{ public BeanTest() { } }
 
?

private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }

@ABeanType标注告诉eclipse这是一个Bean Class Type,它的修改会同步到First_项目的cn/first/BeanTest.as文件中,以便Flex的调用。在这里BeanTest.as 与BeanTest.java对应。Flex调用方法时传递的BeanTest.as类型对象会在java端被smartinvoke解析为BeanTest.java类型对象处理,反过来也一样。

在eclipse 工具栏上点击

? 图标,打开新建对话框,输入如下内容:


?
?
点击完成,eclipse会自动生成cn.First.BeanTest类,内容如下:

?
?
我们在BeanTest.java 中添加name属性如下:
 

?

private var _name:String; public function set name(val:String):void{ this._name=val; } public function get name():String{ return this._name; }

打开BeanTest.as你会发现,该name属性也被同步到这里,如下:

 

?

public void beanTest(BeanTest bean){ System.out.println(bean); }

?

我们在ServiceTest.java类中添加方法beanTest以便测试BeanTest类。内容如下:
 

?

public function beanTest(bean:BeanTest):void{ this.call('beanTest',arguments); }

?

打开First_项目中的ServiceTest.as文件会发现beanTest方法已被同步到这里,如下:
?
 

?

在FirstWin.mxml中调用ServiceTest.as类的beanTest方法你会发现Flex传递的BeanTest对象会被传递到Java端。

在Bean Class Type类型中不仅可以定义基本的数据类型, 而且可以定义其他的Bean Class Type类型。当然Bean Class Type也可以继承其他的类。


注意SmartInvoke在这里只支持基本类型与复杂Bean类型的传递,不介意用户传递Service Class TypeBean Class Type类型,因为这样会增加程序的复杂度

?