存档于 'Flex'

flex+BlazeDS与spring集成

发表时间:18. 12月, 2009 作者:Freddie.

0

本文基本上就是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.

0

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.

0

问题
我们要保证组件仅仅在需要显示在屏幕上的时候才被创建。
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.

0

使用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.

0

很多时候我们需要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.

0

解决思路:
为应用程序的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拉··

详细内容

PHVsPjxsaT48c3Ryb25nPndvb19hZHNfcm90YXRlPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzI1MF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfMjUwX2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtMjUweDI1MC5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF8yNTBfdXJsPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfY29udGVudF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfY29udGVudF9kaXNhYmxlPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2NvbnRlbnRfaW1hZ2U8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy00Njh4NjAtMi5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9jb250ZW50X3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzE8L3N0cm9uZz4gLSBodHRwOi8vamF2YWZsZXgubmV0L3dwLWNvbnRlbnQvdGhlbWVzL2J1c3liZWUyMC9pbWFnZXMvYWR2ZXJ0XzEyNXgxMjUuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfMjwvc3Ryb25nPiAtIGh0dHA6Ly9qYXZhZmxleC5uZXQvd3AtY29udGVudC90aGVtZXMvYnVzeWJlZTIwL2ltYWdlcy9hZHZlcnRfMTI1eDEyNS5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8zPC9zdHJvbmc+IC0gaHR0cDovL2phdmFmbGV4Lm5ldC93cC1jb250ZW50L3RoZW1lcy9idXN5YmVlMjAvaW1hZ2VzL2FkdmVydF8xMjV4MTI1LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzQ8L3N0cm9uZz4gLSBodHRwOi8vamF2YWZsZXgubmV0L3dwLWNvbnRlbnQvdGhlbWVzL2J1c3liZWUyMC9pbWFnZXMvYWR2ZXJ0XzEyNXgxMjUuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfNTwvc3Ryb25nPiAtIGh0dHA6Ly9qYXZhZmxleC5uZXQvd3AtY29udGVudC90aGVtZXMvYnVzeWJlZTIwL2ltYWdlcy9hZHZlcnRfMTI1eDEyNS5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV82PC9zdHJvbmc+IC0gaHR0cDovL2phdmFmbGV4Lm5ldC93cC1jb250ZW50L3RoZW1lcy9idXN5YmVlMjAvaW1hZ2VzL2FkdmVydF8xMjV4MTI1LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX2Rpc2FibGU8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTQ2OHg2MC0yLmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF91cmw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8yPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzM8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfNDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF81PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzY8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hbHRfc3R5bGVzaGVldDwvc3Ryb25nPiAtIGRlZmF1bHQuY3NzPC9saT48bGk+PHN0cm9uZz53b29fYXV0b19pbWc8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9leDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbW1lbnRfcG9zdHM8L3N0cm9uZz4gLSA1PC9saT48bGk+PHN0cm9uZz53b29fY29udGVudDwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY29udGVudF9hcmNoaXZlczwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY29udGVudF9mZWF0PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jdXN0b21fZmF2aWNvbjwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlYXR1cmVkX3Bvc3RzPC9zdHJvbmc+IC0gMTwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlZWRidXJuZXJfaWQ8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19mZWVkYnVybmVyX3VybDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2dvb2dsZV9hbmFseXRpY3M8L3N0cm9uZz4gLSA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4NCnZhciBnYUpzSG9zdCA9ICgoXCJodHRwczpcIiA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCkgPyBcImh0dHBzOi8vc3NsLlwiIDogXCJodHRwOi8vd3d3LlwiKTsNCmRvY3VtZW50LndyaXRlKHVuZXNjYXBlKFwiJTNDc2NyaXB0IHNyYz1cJ1wiICsgZ2FKc0hvc3QgKyBcImdvb2dsZS1hbmFseXRpY3MuY29tL2dhLmpzXCcgdHlwZT1cJ3RleHQvamF2YXNjcmlwdFwnJTNFJTNDL3NjcmlwdCUzRVwiKSk7DQo8L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPg0KdHJ5IHsNCnZhciBwYWdlVHJhY2tlciA9IF9nYXQuX2dldFRyYWNrZXIoXCJVQS0xNjI3Mjk2NC0xXCIpOw0KcGFnZVRyYWNrZXIuX3RyYWNrUGFnZXZpZXcoKTsNCn0gY2F0Y2goZXJyKSB7fTwvc2NyaXB0PjwvbGk+PGxpPjxzdHJvbmc+d29vX2hvbWVfYXJjPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2hvbWVfbGluazwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2xpbmtfZGVzYzwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2hvbWVfbGlua190ZXh0PC9zdHJvbmc+IC0gSG9tZTwvbGk+PGxpPjxzdHJvbmc+d29vX2hvbWVfdGh1bWJfaGVpZ2h0PC9zdHJvbmc+IC0gOTI8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX3RodW1iX3dpZHRoPC9zdHJvbmc+IC0gMjQ3PC9saT48bGk+PHN0cm9uZz53b29faW1hZ2VfaGVpZ2h0PC9zdHJvbmc+IC0gMjEwPC9saT48bGk+PHN0cm9uZz53b29faW1hZ2Vfc2luZ2xlPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19pbWFnZV93aWR0aDwvc3Ryb25nPiAtIDU0MDwvbGk+PGxpPjxzdHJvbmc+d29vX2xvZ288L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19tYW51YWw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vc3VwcG9ydC90aGVtZS1kb2N1bWVudGF0aW9uL2J1c3ktYmVlLzwvbGk+PGxpPjxzdHJvbmc+d29vX3BvcHVsYXJfcG9zdHM8L3N0cm9uZz4gLSA1PC9saT48bGk+PHN0cm9uZz53b29fcmVzaXplPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX3Nob3J0bmFtZTwvc3Ryb25nPiAtIHdvbzwvbGk+PGxpPjxzdHJvbmc+d29vX3NpbmdsZV9oZWlnaHQ8L3N0cm9uZz4gLSAxMjA8L2xpPjxsaT48c3Ryb25nPndvb19zaW5nbGVfd2lkdGg8L3N0cm9uZz4gLSAxODA8L2xpPjxsaT48c3Ryb25nPndvb190YWJzPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb190aGVtZW5hbWU8L3N0cm9uZz4gLSBCdXN5IEJlZTwvbGk+PGxpPjxzdHJvbmc+d29vX3RodW1iX2hlaWdodDwvc3Ryb25nPiAtIDg4PC9saT48bGk+PHN0cm9uZz53b29fdGh1bWJfd2lkdGg8L3N0cm9uZz4gLSA4ODwvbGk+PGxpPjxzdHJvbmc+d29vX3R3aXR0ZXI8L3N0cm9uZz4gLSB0dWIxMjM8L2xpPjxsaT48c3Ryb25nPndvb192aWRlb19jYXRlZ29yeTwvc3Ryb25nPiAtIFNlbGVjdCBhIGNhdGVnb3J5OjwvbGk+PC91bD4=