- 浏览: 648340 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ssxszt:
...
解决PopUpManager弹出窗口RangeError: Error #2006: 提供的索引超出范围 -
lijiajia:
木子佳 写道楼主,想要源码学习,谢谢。kajiamuzi@16 ...
DataGrid和AdvancedDataGrid CheckBox全选功能 -
juedi:
很好,是我需要的东东
Flex异常处理设计 -
暖暖fh:
大神,我想要源码,这个功能我折腾了好我啊 fuhan247@1 ...
DataGrid和AdvancedDataGrid CheckBox全选功能 -
chenzi:
一样的代码,两台机器上面,完全不同的报错。。Flex实现htt ...
Flex使用Https协议
Flex与服务器交互一般需要监听ResultEvent.RESULT事件和FaultEvent.FAULT事件。很多时候关注的是RESULT事件,FAULT事件在出现异常的情况下显得很有用。FAULT事件分为客户端和服务器端两大类。
下图是一个客户端的错误信息,代码如下:
private function onFault(event:FaultEvent):void{ Alert.show(event.toString()); }
从弹出的信息中可以看出是因为amf的url地址不对造成的。
下面来分析下FaultEvent对象。
FaultEvent对象的一个重要属性就是fault,Fault 类表示远程过程调用 (RPC) 服务调用中存在错误。
Fault的常用属性如下表:
下面是服务器端的异常信息。
与客户端异常信息对比可以发现:客户端的faultCode以Client开头,服务器端的faultCode以Server开头。
在java端可能用的比较多的异常处理类似于:new Exception("用户ID不能为空");这些异常是受检验的异常,用户很容易知道该如何办,但是如果抛出一个运行时异常,例如:java.lang.NullPointerException。用户就傻了,我改如何处理呢?是我操作有误还是系统出现问题了。业务用户现在能做的就是在bug系统上报一个bug。
一个好的异常处理架构应遵循以下规则:
1 任何异常都不会导致应用系统的崩溃。
2 在发生异常时,允许应用程序进行相应的处理。
3 显示给用户的错误信息要清晰的描述发生了什么错误以及应该采取什么样的处理。
4 如果需要辅助信息,错误信息还要帮助用户与帮助部门交互,为帮助部门团队提供必要的信息, 使他们能够快速的容易的重现错误。
5 日志信息能为开发团队人员在识别错误、在应用程序代码中定位错误产生的位置以及修正错误提供必要的信息。
6 错误处理代码不会降低应用程序代码的可读性。我们经常在网上查询oracle错误代码的处理方法。
在来回顾下,Fault对象的faultCode、faultDetail、faultString、rootCause。可以根据错误代码(faultCode)让用户做不同的处理,当然系统也可以记录下一些重要的异常信息作为系统优化的依据,文本说明(faultString)表示那个字段不能为空等提示信息,详细错误信息(faultDetail)可以知道错误更详细的信息,那个类的那个方法发生了什么异常。堆栈信息(rootCause)可以让我们更加清晰的看到错误的堆栈信息。
下面是一个很常用的异常信息提示框,点击详细信息的时候,开发人员可以很容易的定位异常。
我们知道了客户端Fault对象的数据结构后,就需要知道java端如何将java.lang.Exception转化为Fault的。以下主要说的是blazeds。
flex.messaging.MessageException继承自LocalizedException,LocalizedException继承自RuntimeException。
public class LocalizedException extends RuntimeException { /** @exclude - transient, the resourceLoader for localized strings doesn't need to serialize. */ protected transient ResourceLoader resourceLoader; /** @exclude */ protected int number; /** @exclude */ protected String message; /** @exclude */ protected String details; /** @exclude */ protected Throwable rootCause; }
可以很清晰的看到message对应Fault对象的faultString,details对应Fault对象的faultDetail,rootCause对应Fault对象的rootCause,number和Fault对象的code的对应还需要ResourceLoader从blazeds的errors.properties文件中加载相应的错误代码信息。例如:
10000=There was an unhandled failure on the server. {0} 10001=Null endpoint id arrived on message. 10002=No such endpoint: {0} 10003=No configured channel has an endpoint path ''{0}''. 10004=No destination with id ''{0}'' is registered with any service. 10005=Destination ''{0}'' not accessible over channel ''{1}''. 10006=Error occurred while attempting to convert an input argument''s type. 10007=Cannot invoke method ''{0}''. 10007-0-details=Method ''{0}'' not found. 10007-1-details={0} arguments were sent but {1} were expected. 10007-2-details=The expected argument types are ({0}) but the supplied types were ({1}) and converted to ({2}). 10007-3-details=The expected argument types are ({0}) but the supplied types were ({1}) with none successfully converted. 10007-4-details=The expected argument types are ({0}) but no arguments were provided. 10007-5-details=No arguments were expected but the following types were supplied ({0}). 10008=Cannot create class of type ''{0}''. 10008-0-details=Type ''{0}'' not found.
将整个系统的异常进行分类是一个很难的事情,优秀的异常分类能让我们快速的定位错误发生的位置,该如何处理。
如果系统中用到了spring那么很容易的用ApplicationContext加载资源文件,从资源文件中获得相应code的值。
知道了以上的知识后,我们就可以很容易的实现flex的异常处理了,new出一个MessageException,设置messageException的各个属性就可以了。简单的代码如下;
MessageException flex=new MessageException(); flex.setCode("错误代码"); flex.setMessage("我的测试数据"); flex.setDetails("详细信息"); flex.setRootCause(flex.getCause()); throw flex;
如果你的系统用到了SPRING BLAZEDS INTEGRATION,那么请继续往下看。
我们的系统中也许有自己的异常处理类,不想每次抛出异常都是flex的MessageException,如果有一个转化器将会大大降低j2ee与blazeds的耦合度。
其实在SPRING BLAZEDS INTEGRATION中我们很容易实现异常信息转化。
配置如下:
<bean id="sdpExceptionTranslator" class="org.sdp.flex.SdpExceptionTranslator"/> <flex:message-broker id="_messageBroker" services-config-path="/WEB-INF/flex/services-config.xml"> <!-- 异常转化类 --> <flex:exception-translator ref="sdpExceptionTranslator" /> </flex:message-broker>
exception-translator 属性定义了异常转化类的bean。该java只需要实现ExceptionTranslator 接口就可以了。handles方法判断要拦截的异常类,translate方法负责将一个java异常转化为blazeds异常。
public class SdpExceptionTranslator implements ExceptionTranslator { /** * * {@inheritDoc} */ public boolean handles(Class<?> clazz) { //判断要拦截的exception类型 return ClassUtils.isAssignable(SdpException.class, clazz); } /** * * {@inheritDoc} */ public MessageException translate(Throwable t) { if (t instanceof SdpException) { SdpException sdp=(SdpException) t; MessageException se = new MessageException(); se.setCode(""+sdp.getNumber()); se.setMessage(sdp.getMessage()); se.setDetails(sdp.getDetails()); se.setRootCause(t); return se; } return null; } }
限于时间限制,flex异常就先写到这里,有什么疑问可以给我留言。以后我会将自己的flex4+blazeds4+SPRING BLAZEDS INTEGRATION1.5+spring开发平台贡献出来,当然里面有更加详细的异常处理方法了,请大家多多关注我的博客。
评论
自定义一个titlewindow就可以了
我是 想问如何拿到 distnation,method,param 等信息
自定义一个titlewindow就可以了
谢谢你的关注,目前还不能与大家一起共享,以后会开源的。
:)碰到问题在咨询你
谢谢你的关注,目前还不能与大家一起共享,以后会开源的。
发表评论
-
图片背景使用九宫格
2012-07-24 10:20 0[Embed(source="../ass ... -
Flex弹出窗口做为Module
2012-07-23 18:00 0今天才知道原来TitleWindow也可以单独编译 ... -
Repeater使用简介
2012-05-09 19:26 1666mx组件中的Repeater类似与sprak中的Da ... -
Flex失效机制
2012-02-29 17:19 3024一、什么是失效机 ... -
Image倒影效果
2012-02-20 10:11 1729利用spark的BitmapImage实现倒影效果 ... -
Flex设置z轴的index
2012-02-13 14:58 4801flex4的UIComponent新增了dept ... -
得到一个字符的Unicode编码
2012-02-09 12:59 2018ActionScript 3.0String类中函数charC ... -
解决PopupManager.createPopup报错:状态“inactive”未定义
2012-02-04 21:27 2245出现这种的场景是在Module中使用弹出窗口Pop ... -
用chrome浏览器调试flex程序
2012-02-04 18:55 6925开发flex程序难免需要debug,但是IE8浏 ... -
Flash Player11不能输入中文,请谨慎升级
2011-12-18 01:04 2705很多时候,Flash的程序需要集成到其他系统中 ... -
优化Flash Builder
2011-12-18 00:54 2670Flash Builder4中新增了一个ASDO ... -
设置DataGrid的DataGridColumn的width
2011-12-18 00:42 5204DataGrid的column的width属性不 ... -
RollOver和MouseOver的不同
2011-12-12 15:03 3040共同点:都是针对鼠标的进入和进出事件。 ... -
转 Adobe移动战略失败的幕后
2011-12-08 15:56 1370最近一段时间,Adobe和Apple两个昔日的好伙 ... -
Flash Builder该这样编译,希望adboe的人能看到
2011-12-06 12:17 0从3.0开始使用flash builder,对f ... -
List或DataGrid可变行高
2011-11-29 21:57 3171默认情况下List组件是每行的行高是固定的,但 ... -
访问flex sdk版本和Flash player版本
2011-11-16 15:52 1360下面的代码将flex sdk的版本号和Fla ... -
设置TitleWindow的closeButton的mode
2011-11-16 15:42 1218默认情况下,TitleWindow的closeBu ... -
DataGrid header显示tooltip
2011-11-15 17:18 2542有时需要在DataGrid的header上显示 ... -
flash右键菜单项关键字
2011-11-15 16:26 1248有时需要在flash的右键菜单中添加 删除 ...
相关推荐
Flex开发涉及的技能包括ActionScript编程、MXML语法、XML数据处理、Flash Player或Adobe AIR平台的理解,以及良好的UI设计原则。这份详细设计文档为开发团队提供了一个清晰的指南,确保项目按照预定的规格和标准进行...
AS2(ActionScript 2.0)与AS3(ActionScript 3.0)是两种不同的编程语言,AS3运行在AVM2虚拟机上,比AS2快,支持异常处理和强类型。AS3是面向对象的,而AS2则不是。 2. Flex开发框架及优缺点: - Cairngorm:...
这个框架不仅涵盖了从前端到后端的完整数据流,而且还提供了模块化设计思路,如系统架构的分层设计、模块/接口设计以及异常捕捉设计等,这些都是构建稳定、高效企业级Web应用系统的关键。 #### 结语 《Flex3企业级...
Java的核心特性包括垃圾回收、异常处理和多线程,使其成为企业级应用开发的理想选择。在Web开发领域,Java Servlets和JavaServer Pages(JSP)常用于构建动态网页,而Spring框架、Hibernate ORM和Struts等库则提供了...
通过异常处理机制,我们可以优雅地处理这些问题,给用户适当的反馈。 9. **状态管理**: 如果登录成功,可能会涉及到用户状态的管理,例如设置session或cookie来保持登录状态。Flex可以通过SharedObject或者在...
6. **类型转换与异常处理**:在进行类型转换时,可以结合异常处理机制来更好地管理可能出现的问题。 #### 五、总结 通过上述介绍,我们可以看到FLEX中的强制类型转换是一个非常实用的功能。无论是使用`as`关键字...
Flex提供了事件驱动的异常处理,可以在程序中捕获和处理错误。 9. **用户界面设计**:为了提供良好的用户体验,RSS订阅程序需要有直观的界面设计。Flex提供了样式表和皮肤系统,可以根据需要自定义组件外观。 10. ...
- **服务端接口设计**:为了与Flex的RemoteObject通信,C#服务器需要提供对应的方法接口,这些接口会被Flex客户端调用,实现业务逻辑的交互。 4. **Flex源码解析** - **ActionScript代码**:在Flex源码中,通常会...
8. **错误处理和调试**:源码中应包含适当的错误处理机制,以确保程序在遇到异常情况时能够优雅地处理,同时,Flash Builder的调试工具可以帮助开发者定位和修复问题。 通过研究这个源码,开发者不仅可以学习到如何...
6. **异常处理和优化**: 在实际开发中,需要注意错误处理和性能优化,例如,确保调用方法的参数类型匹配,防止跨域安全问题,以及合理使用异步调用来避免阻塞UI线程。 以上就是关于C#与Flex交互的详细步骤和知识...
8. **flex与JAVA开发指南.pdf**:这是一本全面的指南,可能涵盖了Flex与Java的完整开发流程,包括项目设置、数据通信、异常处理、性能优化等方面的内容。 学习和理解这些资料,开发者可以掌握如何有效地利用Flex...
AS2基于AVM1,是非面向对象的,而AS3基于AVM2,是强类型的面向对象编程语言,具有更快的执行速度和异常处理机制。AS3提供了更好的类型检查和错误预防,增强了性能和稳定性。 2. Flex开发框架: - Cairngorm:...
对于计算器应用,测试包括确保所有运算符都能正确工作,以及边界条件和异常情况的处理。 8. **性能优化** 虽然Flex可以创建复杂的交互式应用,但需要注意性能优化。例如,减少不必要的重绘,合理使用组件缓存,...
6. **异常处理**:在处理JSON时,要确保捕获可能出现的错误,例如无效的JSON格式、网络问题等。 通过深入理解这个SWC包的API和示例,开发者可以更好地掌握在Flex中处理JSON数据的方法,提高应用程序的性能和用户...
Flex客户端需要捕获并处理来自后端的异常,同时在后端,日志记录可以帮助追踪和解决可能出现的问题。 7. **性能优化**:通过合理设计服务接口,减少不必要的网络往返,使用数据批处理,以及缓存策略等手段,可以...
Flex提供了事件驱动的错误处理机制,可以捕获并处理与后台交互时出现的异常。同时,使用Flex Builder或Chrome的Flex SDK插件可以帮助开发者进行前端代码的调试。 7. **安全性和性能优化**: 当Flex应用与Java后端...
- **错误处理**:在前后端均添加适当的异常处理机制,以便捕获并处理可能出现的问题。 通过以上步骤,我们能够完成一个基本的Flex与J2EE整合的增删改查应用。这种结合方式不仅提供了丰富的用户体验,也充分利用了...
Flex提供了事件驱动的错误处理,而Java可以通过异常处理来捕获和处理错误。 9. **Performance Optimization** 优化通信性能包括减少数据传输量、合理设计数据结构、缓存策略等。AMF的使用已经大大提高了性能,但还...
10. **事件处理**: 使用`PrintJobEvent`事件监听打印状态,如开始、完成、错误等,以便提供反馈或处理异常。 综上所述,学习和理解Flex打印源代码涉及ActionScript编程、Flex组件使用、项目配置、模板设计以及打印...
3. 错误处理:在进行数据库操作时,需要考虑异常情况,如网络中断、数据库连接失败等。FLEX4提供了事件处理机制,通过监听fault事件,我们可以对错误进行捕获和处理。 四、优化与扩展 1. 响应式设计:FLEX4支持...