flex4 java 复杂自定义对象交互mvc模式

本文展示了如何使用Java实体类与Flex4客户端进行服务交互,包括服务接口定义、远程对象工厂创建Java服务对象以及Flex客户端调用Java方法获取数据。

 效果图

java: 实体类

package com.entitys;

import java.io.Serializable;

public class User implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8688670730681593610L;

	private Integer id;

	private String userName;

	private String passWord;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
}


java:服务层提供一个给flex服务类,很简单就是返回两个user对象的数组

package com.service;

import java.util.ArrayList;
import java.util.List;

import com.entitys.User;

public class UserService {
	
	public List<User> getUserAll(){
		List<User> users = new ArrayList<User>();
		User user = new User();
		user.setId(1);
		user.setUserName("xiaomaha");
		user.setPassWord("1234");
		users.add(user);
		
		User user2 = new User();
		user2.setId(2);
		user2.setUserName("xiaomaha2");
		user2.setPassWord("1234");
		users.add(user2);
		return users;
	}
}


blazeds设置就不贴出来了,我已经记录在博客中

 

 

FLEX4 客服端

结构图:

 

User.as

 

package entitys
{
	//java和as实体映射
	//alias=包+类名
	[RemoteClass(alias="com.entitys.User")]
	public class User
	{
		public function User()
		{
		}
		
		public var id:int;
		
		public var userName:String;
		
		public var passWord:String;
		
	}
}


 remoteObjectFactory.as 

destinationName=java remoting-config.xml 中的 <destination id="userService"> id名称

这样as就可以获取到java提供的服务对象

package remoteservice
{
	import mx.rpc.remoting.RemoteObject;

	public class RemoteObjectFactory
	{
		public function RemoteObjectFactory()
		{
		}
		
		public static function newRemoteObject(destinationName:String):RemoteObject
		{
			var remoteObject:RemoteObject = new RemoteObject(destinationName);
			return remoteObject;
		}
	}
}

UserService.as 接口 我只实现了getUserAll这个方法,其它方法只是定义而已

这个接口的实现类用于远程交互java对象的具体实现

package service.interfalses
{
	import entitys.User;
	
	import mx.collections.ArrayCollection;
	import mx.rpc.remoting.RemoteObject;

	public interface UserService
	{
		function saveUser(user:User):void;
		
		function removeUser(userid:int):void;
		
		function getUser(userName:String,passWord:String):RemoteObject;
		
		function getUserAll():RemoteObject;
		
	}
}

UserServiceImpl.as 实现类 as中返回值是异步的所以无法直接返回对象,类似dwr中的回调函数

getUserAll方法返回是一个RemoteObject让调用方来,出处理返回值!这个更加灵活,也很重要!

  

package service.implementse
{
	import entitys.User;
	
	import mx.collections.ArrayCollection;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.RemoteObject;
	
	import remoteservice.RemoteObjectFactory;
	
	import service.interfalses.UserService;
	
	public class UserServiceImpl implements UserService
	{
		private var remoteObject:RemoteObject=RemoteObjectFactory.newRemoteObject("userService");
		public function UserServiceImpl()
		{
		}
		
		public function saveUser(user:User):void
		{
		}
		
		public function removeUser(userid:int):void
		{
		}
		
		public function getUser(userName:String, passWord:String):RemoteObject
		{
			return null;
		}
		
		public function getUserAll():RemoteObject
		{
			remoteObject.getUserAll();
			return remoteObject;
		}
		
		
	}
}


 

flexClient.mxml 展示台

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			import mx.rpc.remoting.RemoteObject;
			
			import service.implementse.UserServiceImpl;
			import service.interfalses.UserService;
			
			private var userService:UserService = new UserServiceImpl();
			[Bindable]
			private var users:ArrayCollection = new ArrayCollection();
			

			protected function getUserAll_clickHandler(event:MouseEvent):void
			{
				var ro:RemoteObject = userService.getUserAll();
				ro.addEventListener(ResultEvent.RESULT,resultUserAll);
			}
			
			private function resultUserAll(event:ResultEvent):void
			{
				users=event.result as ArrayCollection;
			}

		]]>
	</fx:Script>
	<s:Button label="获取所有用户信息" id="getUserAll" click="getUserAll_clickHandler(event)" x="34" y="239"/>
	<mx:DataGrid x="96" y="37" dataProvider="{users}">
		<mx:columns>
			<mx:DataGridColumn headerText="用户ID" dataField="id"/>
			<mx:DataGridColumn headerText="用户名" dataField="userName"/>
			<mx:DataGridColumn headerText="用户密码" dataField="passWord"/>
		</mx:columns>
	</mx:DataGrid>
</s:Application>





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值