存档于 'Flex'
flex+BlazeDS与spring集成
发表时间:18. 12月, 2009 作者:Freddie.
本文基本上就是Christophe Coenraets 先生的 Using Flex with Spring 的翻译版本,加上了自己的注解便于理解
首先,你得有一个SpringFactory.java类。去网上找,没有的话留下邮箱我发给你们~
1.新建一个工程,服务器端选用j2ee,跟建立blazeDS一样~ 配置好路径,加入web容器支持和spring容器支持~(这一步比较简单,详细步骤就省了~)
2.现在我们来写hello world~ 首先在src下写一个HelloWorld.java,我的路径是com.tub.HelloWorld.java
public class HelloWorld {
public String message(String str){
return str;
}
}
3.然后是flex端~
<mx:RemoteObject id=”ro” destination=”MessageService”/>
<mx:TextInput id=”ta”/>
<mx:Button label=”Button” click=”ro.message(String(ta.text))”/>
<mx:Label text=”{ro.message.lastResult}”/>
注:ro当然就指的是HelloWorld了,destination指定的内容是我们需要在WEB-INF/flex/remoting-config.xml中配置的destination了,它会指定一个具体对应的类或者是spring工厂~(我们这里当然是交给spring工厂拉)
4.代码都写好了,我们现在要对spring进行配置了~~
把SpringFactory放在java目录下,我的路径是com.tub.spring
然后,我们需要在web.xml中加入
<context-param>
<param-name>spring</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
最后,我们还需要对flex的service-config.xml进行配置,加入
<factories>
<factory id=”spring” />
</factories>
好了,大功告成拉~ 赶快去deploy了运行看看吧~
详细内容
3.22在容器中滚动到某个指定的子组件
发表时间:18. 12月, 2009 作者:Freddie.
code:
<mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml”
width=”800″
height=”600″>
<mx:Script>
<![CDATA[
private function showScrollValue():void
{
trace(this.verticalScrollPosition + " " + this.horizontalScrollPosition);
}
private function changeScrollToShowChild():void
{
vbox.verticalScrollPosition=(returnChildrenHeights((comboBox.selectedItem as Number)-1));
}
//Vbox 内所有子组件的高度用以计算并确定一个y 值来设定verticalScrollPosition 属性,从而使Vbox 滚动到指定的子组件的位置。
private function returnChildrenHeights(index:int):Number
{
var i:int=0;
var sumHeight:Number=0;
while (i < index)
{
sumHeight+=vbox.getChildAt(i).height;
i++;
}
return sumHeight;
}
]]>
</mx:Script>
<mx:ComboBox id=”comboBox”
change=”changeScrollToShowChild()”>
<mx:dataProvider>
<mx:Array>
[...]
详细内容
3.15使用延迟实例化提高启动效率
发表时间:18. 12月, 2009 作者:Freddie.
问题
我们要保证组件仅仅在需要显示在屏幕上的时候才被创建。
Container 类默认情况下仅仅在要显示组件的时候创建它,因为UIComponent 默认的
creationPolicy 值为auto。换句话说,当视图(view)设置成可视的时候,如果还没有创建
该视图,则组件会实例化此视图
code:
<mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml”
height=”600″
width=”600″>
<mx:Script>
<![CDATA[
private function changeViewStackCreation():void
{
viewStack.creationPolicy=(comboBox.selectedItem as String);
viewStack.createComponentsFromDescriptors(true);
}
private function changeViewStack():void
{
viewStack.selectedIndex=comboBoxChangeIndex.selectedIndex;
}
]]>
</mx:Script>
<mx:Fade alphaFrom=”0″
alphaTo=”1″
duration=”4000″
id=”fadeIn”/>
<mx:ComboBox dataProvider=”{['none', 'all', 'queued',
'auto']}”
change=”changeViewStackCreation()”
id=”comboBox”/>
<mx:ComboBox dataProvider=”{[1, 2, 3, 4]}”
x=”150″
change=”changeViewStack()”
id=”comboBoxChangeIndex”/>
<mx:ViewStack id=”viewStack”
width=”400″
height=”300″
creationPolicy=”none”
y=”100″>
<mx:Canvas creationCompleteEffect=”{fadeIn}”
creationIndex=”0″
backgroundColor=”#0000ff”
[...]
详细内容
3.13 通过LinkBar 控制ViewStack
发表时间:18. 12月, 2009 作者:Freddie.
使用LinkBar 的selectedIndex 或selectedItem 属性的任意之一可以决定显示ViewStack
的哪一条。
code:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute”>
<mx:Script>
<![CDATA[
[Bindable]
private var indext:int =0;
private function changeIndex():void{
if(indext==2){
indext=0;
}else{
indext++;
}
}
]]>
</mx:Script>
<mx:Canvas click=”changeIndex()”>
<mx:ViewStack selectedIndex=”{indext}”>
<mx:VBox>
<mx:Image source=”BFC069.gif”/>
</mx:VBox>
<mx:VBox>
<mx:Image source=”BFC204.gif”/>
</mx:VBox>
<mx:VBox>
<mx:Image source=”FC229I.gif”/>
</mx:VBox>
</mx:ViewStack>
</mx:Canvas>
</mx:Application>
注:viewstack里必须为容器,我们这里用了vbox~
这里可以实现相册浏览的效果(当然是最简易的拉~~)
详细内容
2.6设置控件的labelFunction
发表时间:18. 12月, 2009 作者:Freddie.
很多时候我们需要combobox里面的标签是一个组合,而不单单只是一个LABEL,怎么解决呢,看代码:
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”
layout=”horizontal”>
<mx:ComboBox dataProvider=”{myDP}”
labelFunction=”getFullName”/>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var myDP:ArrayCollection=new ArrayCollection([{id: 1, fName: "Lucky", lName: "Luke"}, {id: 2, fName: "Bart", lName: "Simpson"}]);
private function getFullName(item:Object):String
{
return item.fName + ” ” + item.lName;
}
]]>
</mx:Script>
</mx:Application>
combobox为我们提供了 labelFunction这个功能 ,你可以自定义自己所需要的信息作为标签~
详细内容
1.15监听键盘事件
发表时间:18. 12月, 2009 作者:Freddie.
解决思路:
为应用程序的stage或组件的keyDown事件添加监听器,读取KeyboardEvents的keyCode属性。
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”
layout=”absolute”
KeyDown=”KeyHandler(event)”
xmlns:ns1=”*”>
<mx:Script>
<![CDATA[
import flash.events.KeyboardEvent;
private function keyHandler(event:KeyboardEvent):void
{
switch (event.keyCode)
{
case 13:
trace("Enter pressed");
break;
case 32:
trace("SpaceBar");
break;
case 16:
trace("ShiftKeypressed");
break;
case 112:
trace("F1pressed");
break;
case 8:
trace("Deletepressed");
break;
}
}
]]>
</mx:Script>
<mx:Button />
</mx:Application>
运行,没反应??? 注意下面放了一个BUTTON,cookbook解释说它必须被激活才能监听到它发出来的事件,
也就是说必须得先按一下,麻烦吧~ 不过,还有简单点的办法。
把上面的KeyDown监听换成下面这一句
addedToStage=”stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler)”
也就是给舞台一个一事件监听,这下就不用激活BUTTON拉··

