Flex 对Java端返回Collection的处理方法

转载 2011年01月18日 01:18:00

 将Flex与Spring集成后(BlazeDS 与Spring集成指南 ),第一个面临的问题就是:对于Java端返回的各种Java类型的对象,Flex中能否有相应的数据类型来映射。

处理,尤其是List、Set、Map及POJO对象值。

在 BlazeDS 与Spring集成指南 例子的基础上,调整相关的测试代码如下:

1、Java端
1.1、com.yeeach.HelloWorldService
package com.yeeach;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class HelloWorldService {
public String hello(String var1) {
return "hello " + var1;
}
public String world(String var1) {
return "world " + var1;
}
public Map<String,List<String>> getMap() {
ArrayList<String> list1=new ArrayList<String>();
list1.add("value11");
list1.add("value12");
list1.add("value13");
ArrayList<String> list2=new ArrayList<String>();
list2.add("value21");
list2.add("value22");
list2.add("value23");
ArrayList<String> list3=new ArrayList<String>();
list3.add("value31");
list3.add("value32");
list3.add("value33");
HashMap<String,List<String>> map=new HashMap<String,List<String>>();
map.put("key1", list1);
map.put("key2", list2);
map.put("key3", list3);
return map;
}
public ArrayList<Person> getList() {
ArrayList <Person> list=new ArrayList<Person>();
Person p1=new Person();
p1.setName("name1");
p1.setPass("pass1");
Person p2=new Person();
p2.setName("name2");
p2.setPass("pass2");
Person p3=new Person();
p3.setName("name3");
p3.setPass("pass3");
list.add(p1);
list.add(p2);
list.add(p3);
return list;
}
public Set<Person> getSet() {
HashSet<Person> set=new HashSet<Person>();
Person p1=new Person();
p1.setName("name1");
p1.setPass("pass1");
Person p2=new Person();
p2.setName("name2");
p2.setPass("pass2");
Person p3=new Person();
p3.setName("name3");
p3.setPass("pass3");
set.add(p1);
set.add(p2);
set.add(p3);
return set;
}
}

1.2、com.yeeach.Person
package com.yeeach;

public class Person {

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

}

2、Flex 端
2.1、helloworld.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical">
<mx:RemoteObject destination="test1"
id="test1">
<mx:method name="hello"
result="sayHelloResult(event)"/>
<mx:method name="world"
result="sayWorldResult(event)"/>
<mx:method name="getMap"
result="getMapResult(event)"/>
<mx:method name="getList"
result="getListResult(event)"/>
<mx:method name="getSet"
result="getSetResult(event)"/>
</mx:RemoteObject>
<mx:HBox>
<mx:Label text="输入:"/>
<mx:TextInput id="inputStr"/>
<mx:Button label="say hello"
click="sayHello(event);"/>
<mx:Button label="say world"
click="sayWorld(event);"/>
<mx:Button label="get map"
click="test1.getMap()"/>
<mx:Button label="get list"
click="test1.getList()"/>
<mx:Button label="get set"
click="test1.getSet()"/>
</mx:HBox>
<mx:HBox>
<mx:Label text="结果:"/>
<mx:TextArea id="result"/>
</mx:HBox>

<mx:Script>

<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import com.yeeach.Person;
[Bindable]
public var person:Person;
[Bindable]

public var map:ArrayCollection=null;

function sayHello(event:Event):void
{
var inputVar:String=inputStr.text;
test1.hello(inputVar);

}

function sayWorld(event:Event):void
{
var inputVar:String=inputStr.text;
test1.world(inputVar);

}

private function sayHelloResult(event:ResultEvent):void
{
result.text=event.result.toString();
Alert.show(event.result.toString(), "返回结果");
}

private function sayWorldResult(event:ResultEvent):void
{
result.text=event.result.toString();
Alert.show(event.result.toString(), "返回结果");
}

private function getMapResult(event:ResultEvent):void
{
for (var key:String in event.result)
{
var list:ArrayCollection=event.result[key] as ArrayCollection;
for (var key1:Object in list)
{
Alert.show("map item key is: " + key + " value is: " + key1);
}

}
}

private function getList():void
{
test1.getList();
}

private function getListResult(event:ResultEvent):void
{
var ac:ArrayCollection=event.result as ArrayCollection;
for (var i:int=0; i < ac.length; i++)
{
var p1:Person=ac.getItemAt(i) as Person;
Alert.show("list item name is: " + p1.name+" /n another usage : "+ac.getItemAt(i).name);
}

}
private function getSet():void
{
test1.getSet();
}

private function getSetResult(event:ResultEvent):void
{
var ac:ArrayCollection=event.result as ArrayCollection;
for (var i:int=0; i < ac.length; i++)
{
var p1:Person=ac.getItemAt(i) as Person;
Alert.show("set item name is: " + p1.name);
}

}
]]>
</mx:Script>
</mx:Application>

2.2、com.yeeach.Person.as
package com.yeeach
{
[Bindable]
[RemoteClass(alias="com.yeeach.Person")]
public class Person
{
public var name:String;
public var pass:String;
}
}

3、总结:
1、JavaBean从Java端返回给Flex,可以通过Flex的Meta Tag [RemoteClass (alias=” “)]来标识服务器端对应的Java的类(一般为POJO对象)。

注意位置,是在class声明前。

2、Java Collection返回给Flex,都可以通过转化为mx.collections.ArrayCollection来进行处理。

3、Flex对于服务器端返回的java其他类型的处理,相对简单,可以参考

 

转载自:

http://livedocs.adobe.com/flex/3/html/help.html?content=data_access_4.html

Java Collection中 List 与 Set,TreeSet排序方法

Collection List 元素有序排列,元素可以重复,因为存在索引。 ArrayList :底层的数据结构使用的是数组结构:查询速度很快 ,增删慢,线程不同步。 LinkedList : 底...
  • geyalu
  • geyalu
  • 2016年09月04日 18:31
  • 329

Java集合Collection接口的一些方法

Collection接口  *     |------List接口:存储有序的,可以重复的元素  *     |------ArrayList(主要的实现类)、LinkedList(对于频繁的插入...
  • A__zho
  • A__zho
  • 2017年07月05日 22:17
  • 60

mybatis报错(三)报错Result Maps collection does not contain value for java.lang.Integer解决方法

项目报错信息: [WARN ] 2016-03-25 13:03:23,955 - org.springframework.remoting.support.RemoteInvocationTrace...

黑马程序员——JAVA基础——集合---概述、Collection中共性方法、List、Map、工具类Collections和Arrays

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------...

从头认识java-15.2 Collection的常用方法(1)

这一章节我们来介绍一下Collection的常用方法。我们下面以ArrayList为例。package com.ray.ch14; import java.util.ArrayList; impor...

java 编程思想中的PriorityBlockingQueue 部分里对PrioritizedTask的排序没有显式调用collection的sort方法。而是通过take时做的这个动作

java 编程思想中的PriorityBlockingQueue 在take是会调用comparable 的compareTo进行排序,故不需要显式调用collection的sort方法 这个方法是...
  • aq23es
  • aq23es
  • 2016年04月29日 09:40
  • 401

马士兵Java课堂笔记-6-容器Collection接口remove方法中判断是否相等并删除问题

容器Collection接口下面可以实现HashSet类, 在HashSet类中有add、remove等方法, 其中, add方法可以往容器中添加元素, 而remove(“example”)可...

Java集合对象的排序使用Collection.sort方法,先实现Comparable接口

Java API针对集合类型排序提供了两种支持: java.util.Collections.sort(java.util.List) java.util.Collections.sort(jav...

Java 集合Collection接口的基本方法

java的Collection接口方法 最近在学习java基础,学习到了集合这个章节,对于基本操作方法写在这记忆。 集合的基本知识: public class TestCollection { ...

java中集合类中Collection接口中的List接口的常用方法熟悉

1:集合类,在java语言中的java.util包提供了一些集合类,这些集合类又被称作容器。 2:区别集合类和数组。(1)数组的长度是固定的,集合的长度是可变的。(2)数组是用来存放基本数据类型的,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Flex 对Java端返回Collection的处理方法
举报原因:
原因补充:

(最多只允许输入30个字)