当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
Flex与Java中的Object交互
发布时间:2011/8/25 11:12:20 来源:城市学习网 编辑:ziteng

  Flex与Java中的Object进行交互,需要准备三个内容,一个是Flex主文件,也就是我们的mxml文件,两个Java类,一个remoting-config.xml.为了减少程序的复杂性,这里只证明Flex可以调用 Java中Object进行交互,不进行与数据库的交互.

  新建一个Java实体类:SpeakUser.java, 如下:

  package com.cx.model;

  import java.io.Serializable;

  public class SpeakUser implements Serializable{

  private static final long serialVersionUID = -4154296753553491429L;

  private String userName;

  private String userPwd;

  private String userTel;

  private String userMail;

  public String getUserName() {

  return userName;

  }

  public void setUserName(String userName)

  {

  this.userName = userName;

  }

  public String getUserPwd()

  {

  return userPwd;

  }

  public void setUserPwd(String userPwd)

  {

  this.userPwd = userPwd;

  }

  public String getUserTel()

  {

  return userTel;

  }

  public void setUserTel(String userTel)

  {

  this.userTel = userTel;

  }

  public String getUserMail()

  {

  return userMail;

  }

  public void setUserMail(String userMail)

  {

  this.userMail = userMail;

  }

  }

  有的作者说这个实体类需要当做Java代码中方法的返回值传递给Flex中的AS代码,所以需要继承Serializable接口,否则将导致异常的发生.但是经过笔者测试,这个Serializable是可选的,即使不继承,也不会出现什么问题,可能是由于flex的版本所决定的吧.

  再创建一Java对象:IntroduceOneself.java,供Flex调用, 类中 以SpeakUser作为参数.代码如下:

  package com.cx.action;

  import com.cx.model.*;

  public class IntroduceOneself {

  public String speak(SpeakUser user){

  System.out.println("Hello, My Name is: " + user.getUserName());

  System.out.println("My telephone is: " + user.getUserTel());

  System.out.println("My Email is: " + user.getUserMail());

  return "名字叫:" + user.getUserName() + ", 电话是: "

  + user.getUserTel() + ", 邮箱是: "+user.getUserMail()

  + "来访问您,请问您是否要接见?";

  }

  }

  然后创建一个ActionScript类:SpeakUser.as, [NextPage]

  用于接受实体类SpeakUser.java的返回值,这里的[Bindable][RemoteClass]是和java代码中的 SpeakUser.java类关联起来.这样利用类型转换将java对象转换成AS对象.代码如下:

  package com.flex.model {

  [Bindable]

  [RemoteClass(alias="com.cx.model.SpeakUser")]

  public class SpeakUser

  {

  public var userName:String="";

  public var userPwd:String ="";

  public var userTel:String ="";

  public var userMail:String ="";

  public function SpeakUser()

  {

  }

  }

  }

  修改Flex主文件:BlazObject.mxml,在其中调用java类,代码如下:

  <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600">

  <mx:Script>

  <![CDATA[

  import com.flex.model.SpeakUser;

  import mx.controls.Alert;

  import mx.rpc.events.ResultEvent;

  public function remotingHelloJavaFlex():void

  {

  var user:SpeakUser = new SpeakUser();

  user.userName = nameInputTxt.text;

  user.userMail = txtUserMail.text;

  user.userPwd = txtPwd.text;

  user.userTel = txtTel.text;

  someOneCome.speak(user);

  someOneCome.addEventListener(ResultEvent.RESULT,getRoHelloRes);

  }

  private function getRoHelloRes(e:ResultEvent):void{

  Alert.show(e.result.toString());

  }

  private function failed():void{

  Alert.show("cuowu");

  }

  ]]>

  </mx:Script>

  <mx:Button label="JAVA Object + FLEX 通信" click="remotingHelloJavaFlex();" x="142" y="234"

  fontSize="12" width="209"/>

  <mx:Label text="姓名" x="121" y="55" fontSize="15"/>

  <mx:TextInput id="nameInputTxt" x="170" y="55"/>

  <mx:Label x="121" y="103" fontSize="15" text="密码:"/>

  <mx:TextInput id = "txtPwd" x="170" y="106"/>

  <mx:Label x="121" y="145" fontSize="15" text="电话:"/>

  <mx:Label x="121" y="187" fontSize="15" text="邮箱:"/>

  <mx:TextInput id="txtTel" x="170" y="148"/>

  <mx:TextInput id="txtUserMail" x="170" y="190"/>

  <mx:RemoteObject destination="someOneComeDes" id="someOneCome" endpoint="/BlazDSObject/messagebroker/amf" fault="failed()" />

  </mx:Application>

  在这里,Flex是通过AMF协议与Java对象进行交互的,其中endpoint定义了影射文件的消息协议,这个文件来自/WEB-INF/flex/services-config.xml中,影射对象的位置是通过remoting- service.xml影射的代码如下:

  <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">

  <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>

  <properties>

  <add-no-cache-headers>false</add-no-cache-headers>

  </properties>

  </channel-definition> remoting-service.xml

  <?xml version="1.0" encoding="UTF-8"?> <service id="remoting-service"

  class="flex.messaging.services.RemotingService">

  <adapters>

  <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>

  </adapters>

  <default-channels>

  <channel ref="my-amf"/>

  </default-channels>

  <destination id="someOneComeDes">

  <properties>

  <source>

  com.cx.action.IntroduceOneself

  </source>

  </properties>

  </destination>

  </service>

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved