flex-java集成通信
MyEclipse 8.0+flex 4 plugin+Blazeds配置

需要软件:jdk-6u12-windows-i586-p.exe、apachetomcat.exe、myeclipse-8.0.0-win32.exe、blazeds-turnkey-4.0.0.14931.zip、FlashBuilder_4_Plugin_LS10.exe一、安装jdk按照步骤,选择路径安装,安装成功后,在安装路径下有java文件,包含jdk和jre 两个子文件。
二、JDK环境变量配置的步骤如下:1.我的电脑-->属性-->高级-->环境变量.2.配置用户变量:a.新建JAVA_HOMEC:\Program Files\Java\jdk1.5.0(JDK的安装路径)b.新建 PATH%JAVA_HOME%\bin;c.新建CLASSPATH.;%JAVA_HOME%\lib;3.测试环境变量配置是否成功:开始-->运行--〉CMD键盘敲入:JAVAC -version出现jdk版本信息,而不是出错信息,即表示配置成功!环境变量配置的理解:1. PATH环境变量。
作用是指定命令搜索路径,在i命令行下面执行命令如javac编译ja va程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。
我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java 等工具了。
2. CLASSPATH环境变量。
作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。
我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。
3. JAVA_HOME环境变量。
它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。
Myeclipse8.5+flex4.5+Blazeds+SSH tomcat

需要的软件:blazeds-turnkey-4.0.0.14931.zip 其他版本也可以如:blazeds-turnkey-3.3.0.20931.zip/wiki/display/blazeds/Downloads建议把这几个都下载,因为Binary里面有我们需要的jarFlashBuilder_4_5_LS10 (这个工具比较大,大约1G多吧)/cfusion/tdrc/index.cfm?product=flash%5Fbuilder&loc=zh%5Fcn一,安装jdk略,做java的这个就不说了二,安装myeclipse8.5略,这个也是做java的必须的三,安装安装时,它会让你选择一个解压的文件路径,这个路径中不可以含有中文,否则会出错,你就解压在C盘中。
然后安装。
所有步骤的默认,安装时间较长。
估计半个小时四,在你的安装文件中找到:Adobe Flash Builder 4.5。
有时可能在你解压的文件中,反正就是找到Adobe Flash Builder 4.5这个文件夹,下面有个Set-up.exe 点击运行这时的目录选择很重要。
必须和你的myeclipse.exe在同一个文件夹下,下一步,一直到完成。
五,到此flex4安装完成。
找到Adobe Flash Builder 4.5\eclipse 下面有两个文件夹features和plugins注意:这一步很重要,如此出错,可能导致你的mycelipse不可用。
继续将这两个文件夹中的内容copy到mycelipse 安装路径下的Common下的features和plugins 文件中记住,只是copy其中的内容到相应的文件夹下,不是整个文件夹Ok,flex开发工具集成到myeclipse完成六,配置tomcat还记得前面下载了blazeds-turnkey吗?里面有个tomcat,其中webapps目录下有三个文件Samples,blazeds,ds-console ,将它们copy到你自己的tomcat对应的wepapps中启动tomcat 运行一下http://localhost:8080/samples如果有页面出现,ok,你成功了七,简单介绍一下下载的这两个文件的作用FlashBuilder:里面包含了flex的类库等。
整合Flex和Java--配置篇

3、 将该工程发布到 tomcat 下,并启动 tomcat。 (注:一定要启动 tomcat,因为在后面 的设置中,它要验证工程的路径) 4、 然后在该工程上右键Flex Project NatureAdd Flex Project Nature
配置正确的显示
配置服务器路径
建议不要修改这里的配置
<mx:Script> <![CDATA[ import mx.rpc.events.ResultEvent; function gg(evnet:ResultEvent):void{ var ff:String = evnet.result as String; ggg.text = ff; } function remotingSayHello():void{ var sname:String = nameInput.text; h.hello(sname); } ]]> </mx:Script> <mx:RemoteObject destination="hello" id="h" result="gg(event)" endpoint="http://localhost:8080/flexweb/messagebroker/amf" > </mx:RemoteObject>
<listener-class>flex.messaging.HttpFlexSession</listener-class> </listener> <!-- MessageBroker Servlet --> <servlet> <servlet-name>MessageBrokerServlet</servlet-name> <display-name>MessageBrokerServlet</display-name> <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class> <init-param> <param-name>services.configuration.file</param-name> <param-value>/WEB-INF/flex/services-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MessageBrokerServlet</servlet-name> <url-pattern>/messagebroker/*</url-pattern> </servlet-mapping>
最佳实践:Flex Spring JAVA BLAZEDS整合

BlazeDS初始化时用于动态创建services, destinations, and adapters。
SpringRemotingDestinationBootstrapService扩展AbstractBootstrapService。
SpringRemotingDestinationBootstrapService 自动导出包含"@Service标注及以FlexService结尾"的Spring Bean为RemoteObject。
@SuppressWarnings("all")public class SpringRemotingDestinationBootstrapService extends AbstractBootstrapService {public static final String DEFAULT_INCLUDE_END_WITH_BEANS = "FlexService";private static Logger logger =LoggerFactory.getLogger(SpringRemotingDestinationBootstrapService.cla ss);private String destChannel;private String destSecurityConstraint;private String destScope;private String destAdapter;private String destFactory;private String serviceId;private String includeEndsWithBeans;@Override/***初始化入口*/public void initialize(String id, ConfigMap properties) { serviceId = properties.getPropertyAsString("service-id", "remoting-service");destFactory = properties.getPropertyAsString("dest-factory", "spring");destAdapter = properties.getProperty("dest-adapter");destScope = properties.getProperty("dest-scope");destSecurityConstraint =properties.getProperty("dest-security-constraint");destChannel = properties.getPropertyAsString("dest-channel", "my-amf");includeEndsWithBeans =properties.getPropertyAsString("includeEndsWithBeans",DEFAULT_INCLUDE_END_WITH_BEANS);Service remotingService = broker.getService(serviceId);if (remotingService == null)throw createServiceException("not found Service with serviceId:" + serviceId);createSpringDestinations(remotingService);}private ServiceException createServiceException(String message) {ServiceException ex = new ServiceException();ex.setMessage(message);return ex;}/***将Spring的Service Name自动定义为destination*/private void createSpringDestinations(Service remotingService) { WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(broker.getServletContext());List<String> addedBeanNames = new ArrayList();for (String beanName : wac.getBeanDefinitionNames()) {Class type = wac.getType(beanName);logger.debug("{}: {}", new Object[]{beanName,type.getName()});boolean isCreateSpringDestination = !type.isAnnotationPresent(com.grgbanking.platform.core.flex.NoneRemoti ngObject.class)|| beanName.endsWith(includeEndsWithBeans) || isCreateDestination(beanName, type);if (isCreateSpringDestination) {createSpringDestination(remotingService, beanName);addedBeanNames.add(beanName);}}("[Auto Export Spring toRemotingDestination],beanNames={}", addedBeanNames);}protected boolean isCreateDestination(String beanName, Class type) {return false;}/** <!-- 动态生成的配置内容 --> <destination id="sampleVerbose"><channels> <channel* ref="my-secure-amf" /> </channels> <adapter ref="java-object" /> * <security> <security-constraint ref="sample-users" /> </security> * <properties> <source>pany.SampleService</source>* <scope>session</scope> <factory>myJavaFactory</factory></properties>* </destination>*/protected void createSpringDestination(Service service, String destinationId) {flex.messaging.services.remoting.RemotingDestinationdestination = (flex.messaging.services.remoting.RemotingDestination) service.createDestination(destinationId);destination.setSource(destinationId);destination.setFactory(destFactory);if (destAdapter != null) {destination.createAdapter(destAdapter);}if (destScope != null) {destination.setScope(destScope);}if (destSecurityConstraint != null) {destination.setSecurityConstraint(destSecurityConstraint);}if (destChannel != null) {destination.addChannel(destChannel);}service.addDestination(destination);}2)修改SpringFactory并扩展FlexFactory根据destination的id,将Flex的destination映射为Spring的Beanpublic class SpringFactory implements FlexFactory {private static final String SOURCE = "source";/***This method can be used to initialize the factory itself.It is called*with configuration parameters from the factory tag which defines the id*of the factory.*/public void initialize(String id, ConfigMap configMap) {}/***This method is called when we initialize the definition of an instance*which will be looked up by this factory.It should validate that the*properties supplied are valid to define an instance.Any valid properties*used for this configuration must be accessed to avoid warnings about *unused configuration elements.If your factory is only used for *application scoped components,this method can simply return a factory*instance which delegates the creation of the component to the*FactoryInstance's lookup method.*/public FactoryInstance createFactoryInstance(String id, ConfigMap properties) {SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties);instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId()));return instance;} // end method createFactoryInstance()/***Returns the instance specified by the source and properties arguments.*For the factory,this may mean constructing a new instance, optionally*registering it in some other name space such as the session or JNDI, and*then returning it or it may mean creating a new instance and returning *it.This method is called for each request to operate on the given item*by the system so it should be relatively efficient.*<p>*If your factory does not support the scope property,it report an error*if scope is supplied in the properties for this instance.*/public Object lookup(FactoryInstance inst) {SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;return factoryInstance.lookup();}/***Spring工厂实例,执行实际的查找动作.**@author yrliang**/static class SpringFactoryInstance extends FactoryInstance { SpringFactoryInstance(SpringFactory factory, String id, ConfigMap properties) {super(factory, id, properties);}@Overridepublic String toString() {return"SpringFactory instance for id="+ getId() + " source=" + getSource() + " scope=" + getScope();}@Overridepublic Object lookup() {Logger logger =LoggerFactory.getLogger(SpringFactory.class);ApplicationContext appContext = WebApplicationContextUtils .getWebApplicationContext(flex.messaging.FlexContext.getServletCo nfig().getServletContext());String beanName = getSource();try {logger.debug("lookup(): bean id=" + beanName);//flex.messaging.FlexContext.getHttpRequest().getSession().getAttribute (arg0);return appContext.getBean(beanName);} catch (NoSuchBeanDefinitionException nexc) {ServiceException e = new ServiceException();String msg = "Spring service named '"+ beanName + "' does not exist.";e.setMessage(msg);e.setRootCause(nexc);e.setDetails(msg);e.setCode("Server.Processing");logger.error("",nexc);throw e;} catch (BeansException bexc) {ServiceException e = new ServiceException();String msg = "Unable to create Spring service named '" + beanName + "' ";e.setMessage(msg);e.setRootCause(bexc);e.setDetails(msg);e.setCode("Server.Processing");logger.error("",bexc);throw e;}}}}3)配置service-config.xml<?xml version="1.0" encoding="UTF-8"?><services-config><factories><factory id="spring"class="com.grgbanking.platform.core.flex.spring.SpringFactory"/> </factories><services><service-include file-path="remoting-config.xml" /><service-include file-path="proxy-config.xml" /><service-include file-path="messaging-config.xml" /><service id="spring-remoting-service"class="com.grgbanking.platform.core.flex.spring.SpringRemotingDestina tionBootstrapService"><!-- 其它生成的RemotingDestination默认属性<adapters><adapter-definition id="java-object"class="flex.messaging.services.remoting.adapters.JavaAdapter"default="true" /></adapters><default-channels><channel ref="my-amf" /></default-channels>--><properties><!--<service-id></service-id><dest-factory></dest-factory><dest-adapter></dest-adapter><dest-scope></dest-scope><dest-channel></dest-channel><dest-security-constraint></dest-security-constraint><includeEndsWithBeans></includeEndsWithBeans>--></properties></service></services>4)FLEX客户端调用this.blogFlexService = new RemoteObject("blogFlexService");//这里需要指定endpoint,因为是动态的RemotingDestination,而静态的RemotingDestination ,flex编译器会将endpoint编译进源代码.//这个也是flex编译器需要指定配置文件而导致使用flex经常会犯的错误之一.this.blogFlexService.endpoint = '../messagebroker/amf';3.公司应用案例这种整合最早是在2010年的FEEL View 5.0中使用,后台的统一平台,FEEL View5.1中都采用这种方法进行整合。
基于Flex+J2EE技术的操作系统精品课程网的设计

基于Flex+J2EE技术的操作系统精品课程网的设计与实现摘要网站建设是Internets应用的重要组成部分。
因此教育部为大力发展信息化建设,提高教学质量,把精品课程建设定为《质量与工程》的先期启动项目。
而《计算机操作系统》课程是我校软件学院的专业核心课程。
因而开发一个操作系统精品课程网站是刻不容缓的。
系统是基于B/S的开发模式。
而客户端视图层采用最为流行的RIA富客户端技术Flex,具有面美观,人性化,交换性强等特点;在后台的业务逻辑层使用的是以Java语言为支持的J2EE技术,由于Java语言具有面向对象和良好的跨平台性等特点,使的系统的分析设计和后期维护更加简单;同时,后台数据库使用了SQL2000作为数据库管理软件,使系统数据的安全性得到了有效的保证。
系统主要实现的功能有,操作系统课程信息管理;教学资源管理,包括教师后台教学资源的上传,学生和游客资源的下载等;在线测试,包括管理题库的录入,和学生按照多种方式进行在线测试等。
本文简要介绍了操作系统精品课程网站系统所用到的主要的技术,如:MVC 的分层思想,Flex/Flash技术,Flex和后台Java的通信技术,面向对象分析设计技术等;同时,比较详细的介绍了使用UML统一建模语言对系统进行分析设计的过程;并对系统中的关键模块的实现进行了详细的描述;最后对这个系统的开发进行了总结。
【关键字】操作系统精品课程网、Flex、在线测试、面向对象AbstractSite construction is an important part of the application Internets. Therefore, the Ministry of Education to develop information technology to improve teaching quality, the fine course construction as the "quality and engineering," up-front to start the project. The "computer operating system" course is my school School Of Software professional core curriculum. Thus, development of a course Web site is operating fine without further delay.System is based on B / S of the development mode. The client-side view of layer of the most popular RIA rich-client technology, Flex, with a face beautiful, humane, and strong characteristics of the exchange; in the background of the business logic tier user Java language support based on J2EE technology, due to Java language with the object-oriented and a good cross-platform characteristics, etc., so that systems analysis and design and post-maintenance of a more simple; same time, the back-end database using SQL2000 as the database management software, allowing the system security of data has been effectively guaranteed. System is mainly to achieve the functions, operating systems courses information management; teaching resources management, including teachers, teaching resources and background of the upload, download resources, students and visitors, etc.; online testing, including the management of item bank of the entry, and students in a variety of ways in accordance with On-line testing.This paper briefly describes the operating system, network system used in fine course the main technology, such as: MVC hierarchical thinking, Flex / Flash technology, Flex, and Java background in communications technology, object-oriented analysis and design technology; next, it more detailedly introduces the use of UML Unified Modeling Language for systems analysis and design process; key modules and systems implementation of a detailed description; Finally, the development of this system are summarized.Key Words:The operated System Quality Course Website、Flex、Test Online、OO目录第一章绪论 (1)1.1 国内精品课程网站的发展趋势 (1)1.2 精品课程网站的特点 (1)1.3 精品课程网站的意义 (2)1.4 论文组织 (2)第二章系统开发相关技术概述 (4)2.1 B/S模式 (4)2.2Flex技术简介 (6)2.2.1 RIA 技术介绍 (6)2.2.2 Flex/Flash 技术 (6)2.3MVC模式 (9)2.4 JavaBean技术 (11)2.5 Servlet技术 (11)2.6FileUpload文件上传组件 (13)2.7 面向对象的分析与设计 (14)第三章系统分析与设计 (16)3.1功能分析 (16)3.2 系统业务类的分析与设计 (20)3.2.1系统的业务类 (20)3.2.2系统的数据结构表 (21)3.3 系统设计 (25)3.3.1 系统体系结构设计 (25)3.3.2系统网络结构设计 (27)3.3.3学生在线测试活动图 (28)第四章系统关键技术的实现 (30)4.1系统主体架构的实现 (30)4.1.1系统设计架构和工作机制 (30)4.1.2 系统服务器端包中的类和作用 (34)4.2系统主界面的实现 (36)4.3 系统中关键技术的实现 (37)4.3.1数据库的链接 (37)4.3.2系统分页技术的实现 (40)4.3.3自动组题测试的实现 (40)4.3.4 学生错题测试 (43)4.3.5错题统计 (44)4.3.6管理员添加题目 (48)4.3.7 文件上传技术的实现 (49)第五章总结 (51)5.1个人总结 (51)5.2 系统总结 (52)参考文献 (54)致谢 (56)第一章绪论1.1 国内精品课程网站的发展趋势为全面提高教育教学质量, 造就数以千万计的专门人才和一大批拔尖创新人才, 提升我国高等教育的综合实力和国际竞争能力, 教育部决定在全国高等学校中启动高等学校教学质量与教学改革工程精品课程建设工作(简称精品课程建设),并把它作为了《质量与工程》的先期启动项目。
Flex讲解

Flex事件机制(二) 事件机制( 事件机制
Event类作为创建Event对象的基类,当发生事件时,Event对象将作为参数传递 给事件侦听器。如MouseEvent、KeyboardEvent • Event类有几个常用的公共属性: ◆是否冒泡:bubbles; ◆目标对象:target; ◆所处阶段:eventPhase; ◆当前对象:currentTarget; Flex事件机制中的自定义事件,也就是向监听器传递自己定义的事件类型,同 时可以通过事件传递参数。 • 1.创建自定义事件名称的Event dispatchEvent(newEvent(“myEvnet”,true,false)); • 2.创建自定义事件类 Public class MyEvent extends Event{ dispatchEvent是EventDispatcher的方法: publicfunctiondispatchEvent(event:Event):Boolean将事件调度到事件流中。事件 目标是对其调用dispatchEvent()方法的EventDispatcher对象。 •
控件简介(二)
• • • • • • • • • • • • • • • • • • • 5:flex控件: 警告alert弹出警告框 下拉列表combobox下拉数据列表 选色器colorpicker可选择的调色盘 数据表格datagrid 数据表格 日期选择器datechooser选择日期控件 日期条 datefield 单击弹出日期选择器 水平列表horizontalList 水平列表项目 水平尺/垂直尺 hrule vrule单个水平或垂直标尺 水平、垂直滑竿 hslider,vslider 图像 image 支持gif jpeg png svg swf 列表list 可滚动的数据组 计数器numericstepper单击向上的按钮增加数据,单击向下的按钮减少数据 进度条progressbar 当前操作进度 滚动条 水平,垂直滚动 scrllbar,hscrollbar,vscrollbar swf加载器 显示swf文件 列表条tabbar一组水平的列表 排列列表tilelist类似表格的行列对正排列的项目 树tree、以展开树的方式显示继承关系的数据 音像videodisplay flex应用中的数据流媒体
Flex+GDS框架搭建及GDS自动生成类
GDS与java通信整合作者:赵国斌2009-10.10一、GDS第一步HelloWorld 实例1、新建java web 项目2、新建helloworldService POJO 并实现sayHello方法。
HelloService类:package org.test;public class HelloService {public String sayHello(String str){return"Hello " + str;}}3、将GDS包granite.jar 拷贝到webRoot\lib下4、配置web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="/xml/ns/j2ee"xmlns:xsi=/2001/XMLSchema-instancexsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"><!-- general information about this web application --><description>Hello World Sample Application</description><display-name>Hello World App</display-name><!-- handle AMF requests ([de]serialization) --><filter><filter-name>AMFMessageFilter</filter-name><filter-class>org.granite.messaging.webapp.AMFMessageFilter</filt er-class></filter><filter-mapping><filter-name>AMFMessageFilter</filter-name><url-pattern>/graniteamf/*</url-pattern></filter-mapping><!-- read services-config.xml file at web application startup --><listener><listener-class>org.granite.config.GraniteConfigListener</listene r-class></listener><!-- handle AMF requests (execution) --><servlet><servlet-name>AMFMessageServlet</servlet-name><servlet-class>org.granite.messaging.webapp.AMFMessageServlet</se rvlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>AMFMessageServlet</servlet-name><url-pattern>/graniteamf/*</url-pattern></servlet-mapping><!-- default content for helloworld application --><welcome-file-list><welcome-file>HelloGDS.swf</welcome-file></welcome-file-list><login-config><auth-method>BASIC</auth-method></login-config></web-app>5、在WEB-INF创建flex目录,在新建的flex目录中创建services-config.xml文件在WEB-INF创建granite目录,在新建的granite目录中创建granite-config.xml文件这两个文件在GDS服务启动时会读取分析,Flex编译时也要通过命令行编译。
06 FlexJava通讯-Flex调用AO接口
作者:严瑞背景简介:新疆阿福迪公司进行Flex开发,需要开发有组档线的缓冲区分析功能,在这里感谢郑江涛提供的实现思路。
实现结果如下:1、开发环境:⏹Eclipse必要有J2EE开发环境;(我用的eclipse3.5)⏹Eclipse需要安装flex插件(我用的Flex sdk4.1.0)⏹Web工程lib需要加入arcobject.jar包(arcgis10.0)⏹在这个eclipse中,需要进行Flex和java通讯(请详看《flex和java通讯配置.pdf》,需要下载Blaseds.war包)2、功能实现思路:(1)根据圆心和半径构造一个圆,请看代码部分中:构造圆代码部分。
(2)根据第一步构造的圆,查询和这个圆相交的阻挡线图层(见代码)(3)如果能查到相交的阻挡线,则将线进行合并(见代码)。
(4)用合并后的线去分割圆,将圆分割为多个部分(见代码);(5)判断第五步中各个圆的部分,哪个部分包含圆心,则这个包含圆心的部分就是最终要求到的结果,返回前台(为json)。
(见代码)3、Flex调用AO注意事项:(1)Server的连接方式(见代码)(2)对象不能new,必须创建(见代码)4、代码Flex端<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="/mxml/2009"xmlns:s="library:///flex/spark"xmlns:mx="library:///flex/mx" minWidth="955" minHeight="600" xmlns:esri="/2008/ags"><fx:Script><![CDATA[import com.esri.ags.Graphic;import com.esri.ags.events.MapMouseEvent;import com.esri.ags.geometry.MapPoint;import com.esri.ags.geometry.Polygon;import com.esri.ags.symbols.SimpleFillSymbol;import com.esri.ags.symbols.SimpleLineSymbol;import mx.controls.Alert;import mx.rpc.events.ResultEvent;import com.esri.ags.utils.JSON;private function OnClick(event:MapMouseEvent):void{var mapPoint:MapPoint = event.mapPoint;var graphic:Graphic = new Graphic(mapPoint);myGraphicsLayer.add(graphic);Alert.show("aa");h.getBufferFeature(mapPoint.x.toString(), mapPoint.y.toString());}private function result(event:Object):void{var outlineSym:SimpleLineSymbol =new SimpleLineSymbol("solid", 0xFF0000, 1, 2);var polySym:SimpleFillSymbol =new SimpleFillSymbol("solid", 0xFF0000, 0.15, outlineSym);var jsonStr:String = event.result as String;//解析jsonvar jsonObj:Object = new Object();Alert.show("bb");jsonObj = JSON.decode(jsonStr);Alert.show("cc");var ptStr:String = jsonObj.ring;//将点坐标放到数组里面var ptArray:Array = ptStr.split(",");var rings:Array = new Array();var ring:Array = new Array();for(var i:int=0;i<ptArray.length;i+=2){var pt:MapPoint =new MapPoint(Number(ptArray[i]),Number(ptArray[i+1]));ring.push(pt);}rings.push(ring);var myPolygon:Polygon =new Polygon(rings,myMap.spatialReference);var gra:Graphic = new Graphic(myPolygon);gra.symbol = polySym;myGraphicsLayer.add(gra);myMap.addLayer(myGraphicsLayer);}private function clearGraphic():void{myGraphicsLayer.clear();}]]></fx:Script><fx:Declarations><esri:Extent xmin="857300.5841894592" ymin="3791501.427000717" xmax=" 875540.9956702823" ymax="3803042.575083013"><esri:SpatialReference wkid="32648"/></esri:Extent><s:RemoteObject id="h" destination="buffer" ><!--mx:method name="getHelloWorld" result="result(event)"/--><s:method name="getBufferFeature" result="result(event)"/></s:RemoteObject></fx:Declarations><esri:Map id="myMap" mapClick="OnClick(event)"><esri:ArcGISDynamicMapServiceLayerurl="http://127.0.0.1:8399/arcgis/rest/services/mountainBuffer/MapServer"/> <esri:GraphicsLayer id="myGraphicsLayer"/></esri:Map><s:Button id="button" label="清理图层" click="clearGraphic()"/><!--s:Button id="button" label="测试" click="yy()"/--></s:Application>Java端package mypacket.demo;import java.awt.Point;import java.io.IOException;import .UnknownHostException;import com.esri.arcgis.carto.FeatureLayer;import com.esri.arcgis.carto.IElement;import com.esri.arcgis.carto.IFeatureLayer;import com.esri.arcgis.carto.IGraphicsLayer;import com.esri.arcgis.carto.ILayer;import com.esri.arcgis.carto.IMap;import com.esri.arcgis.carto.IPolygonElement;import com.esri.arcgis.carto.MapServer;import com.esri.arcgis.carto.PolygonElement;import com.esri.arcgis.system.ServerInitializer;import com.esri.arcgis.server.*;import com.esri.arcgis.server.json.JSONObject;import com.esri.arcgis.geodatabase.IFeature;import com.esri.arcgis.geodatabase.IFeatureClass;import com.esri.arcgis.geodatabase.IFeatureCursor;import com.esri.arcgis.geodatabase.IQueryFilter;import com.esri.arcgis.geodatabase.ISpatialFilter;import com.esri.arcgis.geodatabase.QueryFilter;import com.esri.arcgis.geodatabase.SpatialFilter;import com.esri.arcgis.geodatabase.esriSpatialRelEnum;import com.esri.arcgis.geometry.*;import com.esri.arcgis.geoprocessing.gen.GenMethod.Type;import com.esri.arcgis.interop.AutomationException;import com.esri.arcgis.carto.IGraphicsContainer;import com.esri.arcgis.display.*;public class bufferJava {private static IMap map=null;IServerContext serverContext;IServerObjectManager som = null;IServerContext soc = null;MapServer mapServer = null;IGraphicsContainer graphicsContainer = null;//连接serverpublic bufferJava() throws UnknownHostException, IOException{String ip = "localhost";String user = "arcgismanager";String password = "123";String serverName = "mountainBuffer";String serverType = "MapServer";ServerInitializer serverInitializer = new ServerInitializer();serverInitializer.initializeServer(ip, user, password);ServerConnection serverConn = new ServerConnection();serverConn.connect(ip);som = serverConn.getServerObjectManager();soc = som.createServerContext(serverName, serverType);mapServer = (MapServer)soc.getServerObject();map = mapServer.getMap(mapServer.getDefaultMapName());}public String getBufferFeature(String x,String y) throws UnknownHostException, IOException {Double R = 500.0;System.out.println("x----------444---55--------"+x.toString());Double pointX = Double.parseDouble(x);Double pointY = Double.parseDouble(y);IPoint point = (IPoint) soc.createObject(com.esri.arcgis.geometry.Point.getClsid());point.setX(pointX);point.setY(pointY);point.setSpatialReferenceByRef(map.getSpatialReference());System.out.println("坐标系:"+point.getSpatialReference().getName());//缓冲区分析IPointCollection pointCollection = (IPointCollection) soc.createObject(Polygon.getClsid());Double degree;StringBuilder sb = new StringBuilder();//构造Json,用于返回结果的格式sb.append(" {"+"\"ring\":"+"["+"\r");//构造缓冲圆for(int i=0;i<360;i+=2){degree = i*(Math.PI/180);double x1 = pointX + Math.cos(degree)*R;double y1 = pointY +Math.sin(degree)*R;IPoint pt =(IPoint) soc.createObject(com.esri.arcgis.geometry.Point.getClsid());pt.setX(x1);pt.setY(y1);pt.setSpatialReferenceByRef(map.getSpatialReference());pointCollection.addPoint(pt, null, null);}//得到缓冲区的圆IPolygon polyCircle = (IPolygon)pointCollection;polyCircle.setSpatialReferenceByRef(map.getSpatialReference());IGeometry geometry = (IGeometry)polyCircle;//查询到和圆相交的山脊线IFeatureClass featureClass = this.queryLayerByName("mountain_project").getFeatureClass();ISpatialFilter spatialFilter = (ISpatialFilter) soc.createObject(SpatialFilter.getClsid());spatialFilter.setGeometryByRef(geometry);spatialFilter.setGeometryField("SHAPE");spatialFilter.setSpatialRel(esriSpatialRelEnum.esriSpatialRelIndexIntersects);IFeatureCursor featureCursor = featureClass.search(spatialFilter, false);////如果查到的山脊线不为空,合并山脊线//IGeometry geomUnion = (IGeometry) soc.createObject(Polyline.getClsid());ITopologicalOperator4 topo = (ITopologicalOperator4)geomUnion;IFeature feature = featureCursor.nextFeature();while(feature!=null){ITopologicalOperator4 topo2 = (ITopologicalOperator4)geomUnion;IGeometry geom = feature.getShapeCopy();geomUnion = topo.union(geom);geomUnion = topo2.union(geom);IPolyline line = (IPolyline)feature.getShapeCopy();feature = featureCursor.nextFeature();}IPolyline polyLine = (IPolyline)geomUnion;topo.simplify();polyLine.setSpatialReferenceByRef(map.getSpatialReference());////用线去切割圆//ITopologicalOperator4 topoCut = (ITopologicalOperator4)geometry;topoCut.simplify();IGeometryCollection geometryCollection = topoCut.cut2(polyLine);//判断哪个geometry包含圆心for(int j=0;j<geometryCollection.getGeometryCount();j++){IGeometry g = geometryCollection.getGeometry(j);IPolygon pG = (IPolygon)g;IRelationalOperator relationOperator = (IRelationalOperator)pG;Boolean bool = relationOperator.contains(point);if(bool==true){IPointCollection ptC = (IPointCollection)pG;for(int k=0;k<ptC.getPointCount();k++){IPoint p = ptC.getPoint(k);if(k!=(ptC.getPointCount()-1)){sb.append(" ["+p.getX()+","+p.getY()+"],"+"\r");}else if(k==(ptC.getPointCount()-1)){sb.append(" ["+p.getX()+","+p.getY()+"]"+"\r");}}}}sb.append(" ]," +"\"spatialReference\":{"+"\"wkid\":"+"32648"+"}");sb.append("}");soc.releaseContext();//返回到前台return sb.toString();}//得到要查询的图层private IFeatureLayer queryLayerByName(String name) throws AutomationException, IOException {for(int i=0;i<this.map.getLayerCount();i++){IFeatureLayer featureLayer = (IFeatureLayer) this.map.getLayer(0);if(featureLayer.getName().equals("mountain_project"));{return featureLayer;}}return null;}//得到和缓冲圆相交的山脊线private IFeatureCursor queryMountainLine(IFeatureClass featureClass, IGeometry geometry) throws UnknownHostException, IOException{ISpatialFilter spatialFilter = (ISpatialFilter) soc.createObject(SpatialFilter.getClsid());spatialFilter.setGeometryByRef(geometry);spatialFilter.setGeometryField("SHAPE");spatialFilter.setSpatialRel(esriSpatialRelEnum.esriSpatialRelIndexIntersects);IFeatureCursor featureCursor = featureClass.search(spatialFilter, true);return featureCursor;}}。
Flex考试题
Flex综合测试题1)下面关于RIA的概念说法错误的是(C )A)RIA将桌面应用程序的强交互性与传统Web应用灵活的结合起来B)RIA的富客户端采用异步的方式同服务器端通讯C)RIA在通讯中会传输所有的数据,增加了数据的信息量D)RIA可以整合声音,视频等桌面元素2)一下关于Flex程序说法不正确的是( D )A)Flex程序由*.MXML、*.as、*.css文件组成B)MXML语言专用于Flex程序中,是用于描述界面表现的一种XML标记语言C)ActionScript是针对Adobe Flash Player运行环境的编程语言D)MXML提供了一系列标签供用户使用,MXML不区分大小写3)一下关于Applicaton布局的说话,错误的是( D )A)Application默认的布局是BasicLayoutB)HorizonatalLayout表示水平布局方式C)VertiacalLayout表示竖直布局方式D)TileLayout表示主题布局方式4)关于一下代码的说法,不正确的是(A )<mx:StringValidator source="{textPwd}" Property="text" Trigger="{submit}"triggerEvent="click"/>A)当用户单击提交按钮时,会触发StringValidator验证对象B)当用户单击id为sumit的按钮时,会触发StringValidator验证对象C)StringValidator验证对象验证的目标是id为txtPwd的输入组件D)StringValidator验证对象验证的是txtPwd的text属性5)下面不是为了实现RIA的技术是(A )A)XMTLB)AJaxC)EXTD)Flex6)下面关于Flex自定义组件,说法正确的是(AC)A)自定义组件提高了代码的重用性,降低了维护的难度B)一般讲程序中不常用的功能定义成自定义组件C)一般将程序中通用的功能定义成自定义组件D)一般讲程序中独立的功能定义成自定义组件7)下面关于Flex编译过程说法正确的是( C )A)将ActionScript语言编译成MXML语言B)将ActionScript编译成CSS语言C)将MXML语言编译成ActionScript语言D)将MXML语言编译成css语言8)下面是用于验证日期的是( D )A)<mx:StringValidatorB)<mx:EmailValidatorC)<mx:PhoneNumberValidatorD)<mx:DateValidator9)下面产生单选按钮的是( C )A)labelB)groupC)groupNameD)Groups10)下面关于TextInput的属性说法不正确的是( B )A)text表示得到用户输入的信息B)password表示以密码的形式显示信息C)restrict用于限定用户的输入D)Editable用于限定文本框是否可以输入11)下面对restrict的赋值能够限定文本框中仅能输入数字的是( B )A)$0-9B)0-9C)$0-9^D)0912)下面消息提示框Alert的说法正确的是( B )A)只能生成类似JavaScript的alert提示框B)能够生成类似JavaScript的conform效果C)只能指定消息的内容,不能为弹出框指定标题D)以上说话都不对13)AdvancedDataGrid组件用于绑定数据的属性是(C )A)designViewDataTypeB)columnsC)dataProviderD)data14)下面关于AdvancedDataGrid的显示形式说法正确的是( C )A)只能平面的形式B)只能是树形结构C)可以是平面结构,也可以是树形结构D)以上说法都不对15)关于AdvancedDataGrid绑定数据类型说法正确的是(D )A)只能是ArrayCollection数据类型B)只能是XML数据类型C)只能是XMLList类型D)可以是ActionScript定义的对象数组16)下面关于AdvancedDataGrid说法正确的是( B )A)AdvancedDataGrid不能对数据进行分组B)AdvancedDataGrid能够轻松实现显示摘要的效果C)不能对AdvancedDataGrid中的数据进行操作D)AdvancedDataGrid不能实现排序的功能17)下面关于Flex实现菜单导航效果的说法正确的是(C )A)利用tree组件完成菜单导航的效果B)利用AdvancedDataGrid实现菜单导航的效果C)利用MenuBar实现菜单导航的效果D)以上说法都不对18)下面关于Flex的动画效果说法正确的是(A )A)Flex可以利用定义好的组件,轻松的实现动画效果B)Flex不支持3D的动画效果C)Flex只能利用MXML组件实现动画效果D)Flex动画效果做起来很难,一般都不用19)下面关于淡入淡出效果说法正确的是( A )A)alphaFrom的值大的时候从不透明向透明转变B)alphaFrom的值大的时候从透明向不透明转变C)alphaFrom的值可以比1大D)alphaFrom不能比alphaTo 的值大20)关于Move3D动画效果说法正确的是( C )A)实现旋转功能B)实现淡入淡出功能C)实现移动功能D)实现变大变小功能21)关于Rotatee3D动画效果说法正确的是(A )A)实现旋转功能B)实现淡入淡出功能C)实现移动功能D)实现变大变小功能22)下面关于Flex移动动画说法正确的是(D )A)Flex的移动不能重复B)Flex的移动只能向一个方向移动,不能同时向多个方向移动C)Flex向Z轴方向的移动的值不能小于0,小于0会报错D)Flex向Z轴方向的移动的值能小于0,当小于0的时候表示向外移动23)关于Flex动画效果的持续时间说法正确的是(B)A)Flex动画的时间不能设定,都是1秒B)时间可以设定,用duration属性来设置持续时间C)Duration默认的时间用毫秒计算,如果需要持续3秒钟,其值应该是30000 D)Duration默认的时间用秒计算,如果需要持续3秒钟,其值应该是3 24)下面说法正确的是(B )A)Flex的动画效果一次只能使用一个,不能联合使用B)Flex的动画可以联合使用,但是有先后顺序C)Flex的动画可以联合使用,没有先后顺序D)以上说法都不对25)对于Tree组件的labelField属性赋值,正确的是( C )A)#labelB)$labelC)@labelD)%label26)在使用<s:Fade组件淡出淡入效果时候,alphaFrom属性的值正确的是(C )A)2 B)10 C)0.5 D)-127)在AS3.0中,用于创建Array数组正确的代码是( D )A)var Array temp = new Array();B)var temp:Array = new Array["a","b","c"];C)var temp:Array = ("a","b","c");D)var temp:Array = new Array("a","b","c");28)关于ArrayCollection过滤功能说法正确的是(AD )A)使用filterFunction属性指定过滤的函数名B)使用filter属性指定过滤的函数名C)ArrayCollection过滤函数类型必须是Boolean类型D)必须调用refresh方法使过滤生效29)关于Flex中视图状态,说法正确的是(BC )(选择两项)A)应用程序默认的视图状态为default视图状态B)应用程序默认的视图状态为在<s:states >中定义的第一个状态C)includeIn表示向视图中添加组件D)excludeFrom表示向视图中添加组件30)能够正确从目标对象的dragDrop事件中获取拖放数据的是(B )A)var dgRow:Object=event.dragSource.dataForFormat("item")[0];B)var dgRow:Object=event.dragSource.dataForFormat("items")[0];C)var dgRow:Object=event.dragSource.dataForFormat("items");D)var dgRow:Object=event.dragSource.dataForFormat("item");31)关于ActionScript说法正确的是( C )A)ActionScript是一个纯面向对象的编程语言B)ActionScript是一个纯面向过程的语言C)ActionScript是一个综合了面向过程和面向对象的编程语言D)以上说法都不对32)下面关于ActionScript面向对象的说法正确的是( C )A)ActionScript不支持重写B)ActionScript不支持继承C)ActionScript不支持重载D)ActionScript不支持封装33)Math.round()函数说法正确的是(BC )(选择两项)A)本函数支持保留小数B)本函数不支持保留小数,只能保留整数C)本函数是利用四舍五入的方式进行操作D)本函数是利用只舍不余的方式进行操作34)在ActionScript中如果要将数字进行四舍五入,并且保留小数,使用的方法是(D )A)Math.round()B)Math.floor();C)Math.ceil();D)Number.toFixed()35)ActionScript中循环说法正确的是(D)A)for循环,for in循环,for each循环是一样B)for循环不一样,for in和for each循环是一样C)for循环和for in循环是一样,for each不一样D)for循环,for in循环,for each循环都各有特点,不一样36)下面创建数组,错误的是( C )A)var bookArr:Array=new Array();B)var bookArr:Array=new Array("java","jsp","flex");C)var bookArr:Array=();D)var bookArr:Array=[“java”,“jsp”,“flex”];37)下面关于数据绑定的说法错误的是( C )A)使用数据绑定时,Flex会自动将一个对象的数据复制,提供给另一个对象使用,提供数据的一方称为数据源对象,使用数据的一方称为目标对象B)当数据源对象的数据发生改变化时,目标对象的数据会自动更新,而不需要再编写代码去强制更新C)当数据源对象的数据发生改变化时,目标对象的数据不会自动更新,需要再编写代码去强制更新D)绑定的实现是借助于事件机制来完成的38)下面关于AdvancedDataGrid拖放功能说法正确的是( A )A)dragEnabled="true"表示能够拖动B)dragEnabled="false"表示能够拖动C)dropEnabled="true" 表示能够拖动D)dropEnabled="false" 表示能够拖动39)下面关于Flex页面跳转的方式说法正确的是(A )A)可以使用ActionScrip调用JavaScript来实现跳转B)ActionScript是同JavaScript不同的编程语言,ActionScript不能使用JavaScript来实现页面的跳转C)JavaScript调用ActionScript来实现页面的跳转D)以上说法都不对40)下面关于HttpService组件的说法正确的是(B )A)是直接调用Java类的进行通信的方式B)是来通过Http请求的方式来同后台进行通信C)是同WebService进行通信的一种方式D)是调用Flex其他组件的一种方式41) 下面关于HttpService来进行通信的说法正确的是(B )A)服务器端可以直接以Java对象来响应客户端的请求B)服务器只能通过xml,Json对象等的形式来响应客户的请求C)服务器必须通过WebService的方式来响应请求D)以上的方式都行41)下面关于WebService组件说法正确的是( C )A)是直接调用Java类的进行通信的方式B)是来通过Http请求的方式来同后台进行通信C)是同WebService进行通信的一种方式D)是调用Flex其它组件的一种方式42)下面关于Remoting组件说法正确的是( A )A)是直接调用Java类的进行通信的方式B)是来通过Http请求的方式来同后台进行通信C)是同WebService进行通信的一种方式D)是调用Flex其他组件的一种方式44)下面关于Flex直接调用Java类的说法正确的是(C )A)Flex只能调用普通的Java类,不能调用被Spring管理的类B)Flex可以直接调用Java类,不需要借助任何的其他的插件C)Flex调用Java类的时候需要增加一个插件D)以上的说法都对45)下面关于Flex调用Java类的说法正确的是( D )A)需要将要被Flex调用的Java类注册到flex-config.xml文件中B)需要将要被Flex调用的Java类注册到service-config.xml文件中C)需要将要被Flex调用的Java类注册到application-config.xml文件中D)需要将要被Flex调用的Java类注册到remoting-config.xml文件中46)下面关于Flex直接调用Java类的说法正确的是(C)A)只能传递文本数据,不能传递对象B)只能传递对象,不能传递文本数据C)能够传递对象,但是对象需要系列化D)能够传递对象,|对象不需要系列化47)下面关于HttpService说法正确的是(D )A)HttpService只能访问JSP不能访问Servlet,B)HttpService只能访问Servlet,不能访问JSPC)HttpService即不能访问JSP,又不能访问ServletD)HttpService即能访问JSP,又能访问Servlet48)下面关于Flex同后台通信说法正确的是(AD)(选择两项)A)必须通过回调函数得到服务器端的响应B)不需要通过回调函数,能够直接得到服务器端的响应C)只能捕获正确的响应,不能捕获错误的响应D)即能捕获正确的响应,又能捕获错误的响应49)关于Flex图表说法正确的是(C )A)Flex只能绘制静态的图表,没有实用价值B)Flex只能绘制简单的图表,没有实用价值C)利用Flex的图表功能能够轻松的绘制出各种动态的图表,功能强大D)Flex的图表组件功能强大,不需要借助任何组件,可以直接同后台进行通信50)下面关于<mx:LineChart>说法正确的是(B )A)是绘制饼图的组件B)是绘制线性图表的组件C)是绘制柱状图的组件D)是绘制表格的组件。
Flex基础
Flex安装配置
解决创建的错误如下图
找到Problems看到有一个错误后肉我们右键选重新创 建HTML模板。这里错误已经解决,但是新的问题又 来了,src是java的源文件夹存java源代码的地方,但 是现在被 flex占用了
Flex安装配置
更改flex的项目源文件为flex_src,右键项目属性找到 flex构建路径的主源文件夹把src改为flex_src如下图
使用ActionScript
While和do while
while循环在循环开始前检查条件;如果循环开始条件 不成立,则不会执行 do while 在循环结束后检查条件,这就适合无论测试条 件是否 成立,都至少将部分代码运行一次。
使用ActionScript
条件语句(if和switch)
Flex安装配置
然后把src文件夹 里面的flexweb.mxml移动到flex_src 文件夹里面。最终目录如下图
(二)实现Flex与JAVA通信
实现Flex与JAVA通信
在src目录创建Java文件MyTest如下图
实现Flex与JAVA通信 配置WebRoot/WEB-INF/flex/remoting-config.xml 如下图
Flex的ActionScript支持两种主流注释形式:行内注释和多行注释 行内注释
行内注释以双斜杠开头,从双斜杠到当前行末尾之间的文本是一条 注释。换行意味着注释结束。
多行注释
如果想添加更多的注释用多行注释,多行注释的开始位置以斜杠加 星号(/*)标示。结束位置以星号加斜杠(*/)
很多时候不方便在MXML创建组件中 的定义事件,如组件是根据动 态 数据创建的,这些事件就需要使用Actionscript代码来动态的定义 事件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Flex-java 集成开发配置一、引言Flex访问远程服务都是通过AbstractService来实现的,其通常有3中具体的实现形式:HttpService、WebService和RemoteObject,应该来说RemoteObject是用起来最方便的一个。
Flex提供的数据管理功能就是包装RemoteObject与后台服务进行数据交互的。
根据官方资料,RemoteObject在性能和开发效率方面表现比较好。
基于XML 文本协议的数据封装方式如WebService/HTTPService在大用户并发情况及负载过重的情况下, RemoteObject采用的AMF(Actice Message Format,目前版本是AMF3)效率更高。
AMF协议是一种给予HTTP的二进制协议,把中间层的业务对象(主要是商业数据对象)由Java序列化再反序列化为ActionScript对象。
二、RemoteObject使用过程有几个问题也比较麻烦。
1.编译、配置过程烦琐,例如常见的unknown destination问题就是由于编译或配置过程有误造成的。
2. 编写与Java对象对应的ActionScript对象也是一个比较烦琐的过程。
可以归为重复性而且意义不大的工作。
可以考虑由工具完成此项任务。
想象一下,对于一个面临需求变化且规模较大的项目,要维护ActionScript与对应Java对象的映射,确实不是件令人愉快的事情。
遇到的几个问题:1.unknown destination出错原因可能是flex编译器未制定service参数。
解决方法:在Flex Builder或安装FlexBuilder2插件的Eclipse环境中设置编译器参数,选中Flex项目右键,选中properties,再选择Flex Complier,在附加参数中增加相应参数及值。
例如下面两个,黑体是修改前,红体字是修改后。
-locale en_US-locale en_US -context-root=/flex -services="C:\Program Files\Apache Software Foundation\Tomcat5.0\webapps\flex\WEB-INF\flex\services-config.xml"2.could't invoke XXX method(例如调用具体RO的GetQuote,误写成getQuote)原因大概是由于具体RO的函数名写错了,由于MXML语言大量使用参数注释型的方式指定对象属性,导致在引号之内的标记无法被编译器识别,问题被延迟到Run-time时刻发现。
3.Send failed原因是service-config.xml中的channels定义my-amf的{context.root}在Flex Builder编译器参数中未指定其context-root,导致编译的swf文件可能有误;解决方法同1ng.NoSuchMethodError...原因是RO对应的Java代码中可能出现调用不存在的方法。
例如某个RO对应Java类Ticker在其函数中GetQuote中new一个 StockQuote实例StockQuote x = new StockQuote(param1,param2),但StockQuote类只有一个空参数的构造函数,因此NoSuchMethodError错误被传递到Flex调用RO的客户端。
为什么会出现Ticker引用不存在的StockQuote构造函数,原因是没有及时同步代码。
比如, StockQuote代码修改了,删除了带参数的构造函数,而依赖此类的Ticker 没有及时修正。
5.ReferenceError: Error #1056: 无法为 a 创建属性 b这是一个奇怪的问题,所有同步Java对象类的ActionScript类,即通过metadata关键字RemoteClass指定的类。
对应Java类的属性名称不能以大写字母开头。
三、RemoteObject使用方法1、定义RemoteObject 的集中方法(采用极端发讲述)(1)概要配置客户端(flex):通过ActionScript带代码创建RemoteObject对象Var remoteObj:RemoteObject=new RemoteObject();remoteObj.destination=”beanName”;//获取指定类对象beanNamepublic var oper:Operation=remoteObj.getOperation(“methodName”);//获取方法对象methodNameoper.addEventListener(ResultEvent.RESULT,result);//正常结果处理resultoper.addEventListener(FaultEvent.FAULT, fault);//异常处理faultoper.send();//调用方法服务端(java):remote-config.xml配置<?xml version=”1.0” encoding=”UTF-8”><serviceid=”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=””><properties><source><source><scope></scope></properties></destination></service>2、详细配置客户端(flex):<mx:script><![CDATA[Import mx.rpc.events.FaultEvent;Import mx.rpc.events.ResultEvent;//RemoteObject对象result事件监听器方法Private function RespondHandler(event:ResultEvent):void{//处理远程服务响应}//RemoteObject对象fault事件侦听器方法Private function roErrorHandler(event:FaultEvent):void{//处理远程调试异常}]]></mx:script>RemoteObject调用异步方式调用远程Java对象。
在调用操作后,Flex应用并不停止执行其他操作来等待响应,而是允许用户继续交互,执行其他操作。
当响应返回时,或者抛出异常时,系统调度result事件或者fault事件来通知应用,以执行事件侦听器方法.也就是说,我们通过侦听RemoteObject组件的result和fault事件处理响应和异常。
这种方式与处理远程http服务和web服务响应的方式如出一辙。
当RemoteObject调用远程方法成功时,系统会调度result事件。
开发者可以使用result 事件生成的mx.rpc.events.ResultEvent对象访问服务响应数据。
<mx:RemoteObject id=”” destination=”” fault=” ErrorHandler(event)”> <mx:method name=”” result=”ResultHander(event)”><mx:arguments><itemname></itemname>…<itemname></itemname></ mx:arguments></ mx:method></ mx:RemoteObject>Id属性指定了RemoteObject组件实例名称,在接下来调用该服务对象及处理远程服务响应时使用。
Destination属性指定了要连接的远程服务的目标。
请求时该值必须与服务器remote-config.xml文件中配置的目标id属性相匹配。
我们也可以使用<mx:method>标签为RemoteObject组件定义多个方法。
<mx:method>标签必须内嵌在<mx:RemoteObject></mx:RemoteObject>标签对内,通过name属性指定匹配的远程Java对象方法名称。
开发者可以为每个method标签注册result和fault事件侦听器方法,来分别处理远程Java对象不同方法的响应或调用异常。
在<mx:method></mx:method>标签对中,可以嵌入<mx:arguments>标签指定传递给远程方法的参数。
在<mx:method></mx:method>标签对中,可以嵌入<mx:arguments>标签指定传递给远程方法的参数。
Flex不要求使用与远程Java对象方法参数名称完全相同的名字来定义<mx:arguments>标签。
但是,当调用多参的远程方法时,必须保证<mx:arguments>标签指定的参数顺序与远程方法中的参数顺序相匹配。
服务端(java)配置:<?xml version=”1.0” encoding=”UTF-8”><serviceid=”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=””><properties><source><source><scope></scope></properties></destination></service>Destination节点的source属性说明了远程对象服务的目标,也就是远程Java对象。