`

在项目中使用flex——思路2

    博客分类:
  • Flex
阅读更多
传统的HttpService方式显然对于我们项目来说不那么实用,如果既想保留传统页面,又想使用Flex就要换种思路了,就是将flex嵌入到传统页面中(其实上面例子也是这样做的,只不过是Adobe自动生成js自动帮助嵌入的)。

首先介绍两种组件,第一个不用多说,BlazeDS,Adobe提供的用于和java交互的免费项目,精简版的LCDS(LiveCycle Data Service)。

使用:将BlazeDS发布包(Adobe老窝有)中的flex目录文件夹拷到web-inf下,lib下所有类库导进来(有些用不到)就OK了,进行远程回调时主要是写remote-config.xml,下面会提到。

还有一个就是swfobject,这个是老外(可能是小外)开发的js库,目前版本2.0,主要用来方便的嵌入swf文件(flex编译后产生swf),主要就一个方法

swfobject.embedSWF(swf文件名,要嵌入的html容器名, 宽, 高, flash版本号),另外还有提供传入swf的参数的选项等,封装的比Adobe公司提供的AC_OETags.js要强大一些,使用起来也更加方便。

下面以图表显示为例:首先是显示曲线图。

客户端js代码:

//先将html页面数据封装成JSON:

function queryAreaChart(sh){
 var qssj = $F("sssqqYear")+$F("sssqqMonth");
 var jzsj = $F("sssqzYear")+$F("sssqzMonth");
 var obj = "{'sh':'"+sh+"','qssj':'"+qssj+"','jzsj':'"+jzsj+"'}";//页面的查询条件:起始时间,截止时间,税号
 $("areachartdata").value=obj;//先缓存起来
  $("DataContent").style.display="none";
 $("AreaContent").style.display="";
 swfobject.embedSWF("/sygl/wjgssygl-flex-debug/AreaChart.swf","AreaContent", "1200", "600", "9.0.0");//开始加载flex
}

//这个方法由ActionScript调用

function getAreaChart(){
 var str = $("areachartdata").value;
 var obj = eval('('+str+')');
 return obj;
}


Flex代码(这里使用了BlazeDS远程回调):

<?xml version="1.0"?>
<mx:Application xmlns:mx="[url]http://www.adobe.com/2006/mxml[/url]"
  backgroundGradientAlphas="[1.0, 1.0]" 
  backgroundGradientColors="[#11EDD0, #D6F3DB]"
  initialize="callremote()">

<mx:Style>
.ChineseFont{
fontFamily:”Verdana”,”宋体”;
fontSize:12;
}
</mx:Style>

    <mx:Script>
        <![CDATA[
        import mx.rpc.events.ResultEvent;

        import mx.collections.ArrayCollection;
         [Bindable]
         private var dp:ArrayCollection;


          //回调函数获得页面JSON,关键函数ExternalInterface.call(js函数名,参数)
        public function callremote():void{
          var f:String = "getAreaChart";
          var obj:Object = ExternalInterface.call(f);
          hs.getData(obj);//开始调用java端的方法
        } 
         

        public function back():void{
          var f:String = "backdata";
          var obj:Object = ExternalInterface.call(f);
        }


        public function resultHandler(event:ResultEvent):void{
         var obj:Object = event.result;//获得java服务端返回的Map,到客户端自动转型为object,List转为Array
          dp = new ArrayCollection( [
            { Month: "一月", 区局: obj["qjdata1"], 分局: obj["fjdata1"]},
            { Month: "二月", 区局: obj["qjdata2"], 分局: obj["fjdata2"]},
            { Month: "三月", 区局: obj["qjdata3"], 分局: obj["fjdata3"]},
            { Month: "四月", 区局: obj["qjdata4"], 分局: obj["fjdata4"]},
            { Month: "五月", 区局: obj["qjdata5"], 分局: obj["fjdata5"]},
            { Month: "六月", 区局: obj["qjdata6"], 分局: obj["fjdata6"]},
            { Month: "七月", 区局: obj["qjdata7"], 分局: obj["fjdata7"]},
            { Month: "八月", 区局: obj["qjdata8"], 分局: obj["fjdata8"]},
            { Month: "九月", 区局: obj["qjdata9"], 分局: obj["fjdata9"]},
            { Month: "十月", 区局: obj["qjdata10"], 分局: obj["fjdata10"]},
            { Month: "十一月", 区局: obj["qjdata11"], 分局: obj["fjdata11"]},
            { Month: "十二月", 区局: obj["qjdata12"], 分局: obj["fjdata12"]} ]);
        }
        ]]>
    </mx:Script>

 <!--flex回调对象-->
 <mx:RemoteObject  id="hs"  destination="hyyjtService" >
 <mx:method name="getData" result="resultHandler(event)"/>
 </mx:RemoteObject> 
    <!-- Define custom colors for use as fills in the AreaChart control. -->
    <mx:SolidColor id="sc1" color="blue" alpha=".3"/>
    <mx:SolidColor id="sc2" color="red" alpha=".3"/>
    <mx:SolidColor id="sc3" color="green" alpha=".3"/>

    <!-- Define custom Strokes. -->
    <mx:Stroke id = "s1" color="blue" weight="2"/>
    <mx:Stroke id = "s2" color="red" weight="2"/>
    <mx:Stroke id = "s3" color="green" weight="2"/>

    <mx:Panel title="企业税负图示"  fontSize="12"
        height="100%" width="70%" layout="horizontal">

        <mx:AreaChart id="Areachart" height="100%" width="100%"
             showDataTips="true" dataProvider="{dp}">//数据绑定到图
                 
            <mx:horizontalAxis>
                <mx:CategoryAxis categoryField="Month"/>
            </mx:horizontalAxis>

            <mx:series>
                <mx:AreaSeries yField="区局" form="curve" displayName="区局" areaStroke="{s1}" areaFill="{sc1}"/>
                <mx:AreaSeries yField="分局" form="curve" displayName="分局" areaStroke="{s2}" areaFill="{sc2}"/>
            </mx:series>
        </mx:AreaChart>
        <mx:Button label="返回"  click="back()"/>
            
        <mx:Legend dataProvider="{Areachart}"  legendItemClass="BigFontLegendItem"/>

    </mx:Panel>
</mx:Application>

java服务端代码:

public class HyyjtService {
  //获得显示数据
  public Map getData(Map map){
   //测试数据
   Map m = new HashMap();
   m.put("qjdata1", 1);
   m.put("qjdata2", 2);
   m.put("qjdata3", 3);
   m.put("qjdata4", 4);
   m.put("qjdata5", 5);
   m.put("qjdata6", 6);
   m.put("qjdata7", 7);
   m.put("qjdata8", 8);
   m.put("qjdata9", 5);
//省略。。。。
   return m;
  }
}

web.xml添加配置:

    <listener>
        <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>

    <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>

remote-config.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<service id="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="hyyjtService">      
      <properties>      
          <source>cn.tohot.sygl.yjfx.chart.HyyjtService</source >      
      </properties> 
   </destination>
 
</service>



分享到:
评论

相关推荐

    ddp.rar_flex_对对碰

    在这个名为“ddp.rar_flex_对对碰”的压缩包中,包含了完整的源代码、工程文件以及运行程序,为开发者提供了宝贵的参考资源。 首先,让我们关注核心的编程文件`Game.as`。这是一个ActionScript类文件,它定义了...

    IOS新一代界面开发利器 —— FlexLib.zip

    FlexLib是iOS开发中的一款创新工具,它将前端布局模型——Flexbox引入到原生的iOS应用开发中,极大地简化了界面构建的过程。这个开源项目旨在解决iOS界面设计中的复杂性问题,使得开发者能够如同编写网页布局那样,...

    杭电编译原理实验——简单C语言语法分析器

    在这个实验中,我们将聚焦于“杭电编译原理实验——简单C语言语法分析器”,这是一个旨在帮助学生深入理解词法分析概念的实际操作项目。** **词法分析**是编译过程的第一步,它的主要任务是将源代码分解成一系列有...

    编译原理实习项目

    在实习项目中,你可能会接触到如ANTLR、Flex & Bison等工具,它们可以帮助你完成上述过程。ANTLR用于生成解析器,Flex和Bison则常用于词法分析和语法分析。此外,你还需要编写文档,详述你的设计思路、实现过程以及...

    Flex_Viewer解析-----结构(1).doc

    为了更清晰地理解Flex_Viewer中文件和组件是如何组织的,下面将详细介绍两个核心文件——`MapManager.mxml`和`Controller.mxml`。 ##### MapManager.mxml 该文件定义了地图的基本配置和操作,包括地图控件的初始化...

    浅析微信小程序自定义日历组件及flex布局最后一行对齐问题

    在编写过程中,因为大家都知道,日历组件是有固定行数和每一行的固定列数的(即使当前方块内没有值),所以结合小程序“数据优先”的特点,最合适的布局方式一定是flex了! 先说一下大致思路(布局上),笔者将整个...

    IT之家小程序版客户端(使用 Mpvue 开发,兼容 Web)ithome-lite-master.zip

    在本文中,我们将深入探讨如何利用Mpvue框架来构建这样的应用,并分析其核心技术和设计思路。 首先,我们需要理解什么是Mpvue。Mpvue是由滴滴出行开源的一个基于Vue.js的小程序框架,它允许开发者使用Vue.js的语法...

    仿豆瓣电影-demo

    2. **数据绑定**:在wxml中,通过双大括号`{{ }}`进行数据绑定,将后台数据与前端界面关联起来,实现动态显示。 3. **API调用**:微信小程序提供了丰富的API接口,如网络请求、用户授权、设备信息获取等。在“仿...

    Webgame侠域完整源代码

    【描述】中提到,这个项目遵循GNU协议,这表明它是一个开源软件。GNU协议(GNU General Public License,简称GPL)是一种广泛使用的自由软件许可证,确保所有用户都能自由地使用、修改、复制和分发该软件。这意味着...

    PureMVC框架电子书

    在实际开发中,PureMVC的使用可以简化项目管理,让开发者更专注于业务逻辑而不是架构细节。同时,其模块化的特性使得团队协作变得更加容易,每个成员可以专注于自己负责的部分,而不用担心对全局的影响。此外,由于...

    编译原理 课设 词法分析器

    2. **设计思路**:详细说明如何设计词法分析器,包括选择合适的算法(如LR、LL、LR(1)等)和数据结构(如有限状态机),以及如何处理边缘情况和错误处理。 3. **实现方法**:具体描述实现词法分析器的过程,可能...

    番茄时钟小程序的源码比较全

    【番茄时钟小程序的源码比较全】这个标题暗示了我们即将探讨的是一个关于时间管理工具——番茄工作法的小程序的源代码。番茄工作法是一种流行的时间管理技巧,通过将工作时间分割成25分钟的工作块(称为“番茄”)和...

    编译原理课程设计(源代码+报告文档)

    在实际操作中,你可能需要用到一些工具和库,例如ANTLR、Flex和Bison等,它们可以帮助简化编译器的构建。同时,深入阅读并理解编译器相关的经典书籍,如《编译器设计》(Dragon Book),将对你的学习大有裨益。 ...

    RS232通信方式控制的基于CPLD的电子琴

    在设计过程中,使用了MAX+PLUS II软件进行设计输入、编译、综合与仿真。此外,还介绍了如何通过使用LPM宏单元库、硬件描述语言(如VHDL)以及EAB单元来提高设计效率。 #### 结论 本项目成功地利用CPLD实现了由...

    编译原理 词法分析器 可执行源代码 及 参考 报告

    在实践中,词法分析器的实现可以使用手工编写,也可以利用工具自动生成,如Flex或JavaCC。 可执行源代码是指经过编译或解释过程后的代码,它可以直接在目标平台上运行,无需进一步的翻译。在编译原理的上下文中,这...

    dreamweaver网页大作业 我的家乡

    同时,可能需要提供一份项目说明文档,解释设计思路和实现过程。 在这个“我的家乡”网页大作业中,学生不仅可以锻炼Dreamweaver的操作技能,还能学习到如何用网页语言讲述个人的故事,让更多人了解和欣赏自己的...

    微信小程序-仿豆瓣电影-demo

    在这个"微信小程序-仿豆瓣电影-demo"项目中,开发者模仿了知名的电影评分与分享平台——豆瓣电影的功能,旨在帮助学习者理解微信小程序的开发流程和相关技术。 一、微信小程序的基础架构 微信小程序基于JavaScript...

    一大堆关于编译原理的东西(包括多个可用的词法语法分析器以课程设计报告等)

    3. **编译原理课程设计报告**:课程设计报告通常会详细记录学生在学习编译原理时所完成的项目,包括目标、设计思路、实现方法、遇到的问题及解决方案等。通过阅读这些报告,你可以了解到实际应用编译原理知识的过程...

    kiki_portfolio

    在这个项目中,可能使用了ID选择器(#id)、类选择器(.class)以及元素选择器(element)等,通过这些选择器来指定特定元素的样式。例如,`.header`可能代表头部区域,`#main-content`可能是主要内容区域。属性如`...

Global site tag (gtag.js) - Google Analytics