Flex框架选择[问题持续更新]

   业余时间研究FLEX,计划用FLEX作为自己理想系统的前台选择。原来用FLEX+Spring+Blazed+oracle(考虑经济原因,还是换mysql了)搭建过第一套的框架,后台java用了现有公司的框架。觉得不妥,就换了下,FLEX4+Spring+Blazed+IBatis+Cairngorm3+Parsley2.2+Oracle(考虑经济原因,还是换mysql了),这个框架是很长时间网上收集信息和比较得来的,因为肯定不够时间去每样都试过去,就尽量比较多的评论和文章。

    flex+spring+blazed+ibatis网上整合的实例很多,很快就搭起来了,Cairngorm2后续是没有维护版本了,Cairngorm3作为类库,感觉支持Parsley较好,并且网上用过Parsley的人都对该框架表示好感。看过介绍和评论,也确实还不错,只可惜现在国内的资料较少,只能混E文,累哦。。。

    目前主要是整合Parsley2.2,遇到问题包括:

1.在creationComplete方法里面调用[MessageDispatcher]标注的dispatcher方法,由于Parsley注入是异步的,还没完成,导致creationComplete方法里面不能使用注入的Object。

2.主应用parsley的配置,如果使用 Parsley指南中的写法,加入

preinitialize=”FlexContextBuilder.build( ParsleyExampleConfig );
    addedToStage=”dispatchEvent(new Event(‘configureIOC’, true));”

居然会导致注入无效,不晓得是不是parsley版本是2.2的原因,改用mxml方式写,就正常了:

<fx:Declarations>
  <parsley:Configure/>
  <parsley:ContextBuilder config=”ParsleyConfig”/>
</fx:Declarations>

3.[PostConstruct]标注的方法必须是public,并且无参数的,private会调用不到,有参数,则会报错。建议使用[init]标注。

4. 突然之间parsley不工作了,工程提示: MyWorld.mxml 设计模式无法加载 parsley-flex4-2.2.2.swc。它可能与此 SDK 不兼容,或者无效。(DesignAssetLoader.CompleteTimeout) /MyWorld/flex_src Unknown Problem
经网上查询,Adobe论坛已经收录该问题,需要更新Flex SDK 到4.1.0,不过奇怪的时,我下载完4.1.0,放进flex builder插件的SDK下,然后重启Eclipse,还没等我更换工程SDK,问题居然自己解决了。。。

5. parsley配置文件感觉没加载的问题,有可能是你的config文件配置产生错误,例如,

<Object type=”{RemoteObjectOperation}” id=”employeeServiceDest”>
  <Property name=”destination” value=”employeeServiceDest”/>
</Object>

其中RemoteObjectOperation.as中destination为private属性,则会导致该类无法注入实例化,则parsley不生效。
遗憾的是,系统启动初始化的时候,居然没有丝毫日志提示。。。悲剧啊,明天研究看看。
(parsley初始化错误日志打印方法,在debug模式下,控制台有日志:
private static const logger:Logger = LogContext.getLogger( MyWorld );
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
FlexLoggingXmlSupport.initialize();
XmlContextBuilder.build("config/flex_log.xml");
logger.debug( "call create method on user service" );
)

flex_log.xml:
<objects xmlns="http://www.spicefactory.org/parsley"
xmlns:log="http://www.spicefactory.org/parsley/flex/logging" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.spicefactory.org/parsley http://www.spicefactory.org/parsley/schema/2.3/parsley-core.xsd   http://www.spicefactory.org/parsley/flex/logging
      http://www.spicefactory.org/parsley/schema/2.3/parsley-logging-flex.xsd">
<log:target level="debug">
<log:filter>org.spicefactory.*</log:filter>
</log:target>
<!-- other object definitions -->
</objects>


6.国际化问题,我的目录结构为

MyWorld

–resources

—-locale

——zh_CN

———中文.properties

——en_US

———English.properties

——zh_TW

———繁体中文.properties

,则需要附加如下编译参数

-locale zh_CN -allow-source-path-overlap=true -source-path=E:\workspace\MyWorld\resources\locale\{locale}

7. 装ibatis的代码自动生成插件Abator时,MyEclipse8.5也要升级8.6,结果升完就挂了,然后重新装了MyEclipse9,装flex4插件,装完flex插件,开MyEclipse报 错误5 请重新安装什么的。这个时候,要先卸载原flex插件,再重新安装,就好了。

其他的忘了,框架还在封装中。
8. eclipse9,导入到工程貌似都会有构建器失败的情况出现,保存java时候提示 构建器 异常,需要修改org.eclipse.wst.common.project.facet.core.xml
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="java" version="1.5"/>
  <installed facet="jst.web" version="2.5"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
或者在.project中增加属性
    <nature>com.genuitec.eclipse.j2eedt.core.webnature</nature>
9.eclipse中调试flex时,报(C:\Windows\system32\Macromed\Flash\NPSWF32.dll:5) 问题,
网上查找资料http://forums.adobe.com/thread/865611
需要:a,删除C:\Windows\system32\Macromed\Flash下的所有文件,文件被占用时,可以用360强删(这个功能蛮好用的,省得我关闭QQ,浏览器神马的)b.执行 http://kb2.adobe.com/cps/141/tn_14157.html上下载的flash播放器卸载exe。c.安装D:\Program Files\Adobe\Adobe Flash Builder 4.5\player\win\10.2下的InstallPlugin.exe和InstallAX.exe。
然后就OK了。

10.parlsey框架build配置文件时候,报as文件unknown class问题,可以在flex编译器中附加编译参数:-load-config+=E:\workspace\MyWorld\flex_src\classref.config
classref.config:

<?xml version="1.0" encoding="UTF-8"?>
<flex-config>
<includes append="true">
<symbol>lingran.model.CoreModel</symbol>
<symbol>lingran.command.Bootstrap</symbol>
<symbol>lingran.command.ModuleMessageInterceptor</symbol>
<symbol>lingran.vo.ModuleDescription</symbol>
<symbol>lingran.events.DataEvent</symbol>
</includes>
</flex-config>
11.module载入null问题,原代码如下:
		private var currentModule:Module;
				currentModule=currentModuleInfo.factory.create() as Module;
				FlexGlobals.topLevelApplication.addElementAt(currentModule, 0);

由于currentModuleInfo.factory.create()结果返回为null,导致下面一句报错,修正为如下代码,则可以。参考资料:http://www.cnblogs.com/yjmyzz/archive/2011/04/10/2011784.html
private var currentModule:Object;
				currentModule=currentModuleInfo.factory.create();
				FlexGlobals.topLevelApplication.addElementAt(currentModule as IVisualElement, 0);

你可能感兴趣的:(spring,框架,ibatis,Flex,parsley)