`
felly822
  • 浏览: 9705 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一个和jsp交互的flex框架实现

阅读更多

前些日子, 做了一个组态监控程序,考虑到图形化展示,最终选择了 flex做为前端显示,即在jsp中嵌入flash的形式实现。
大家都知道,目前有很多 java+flex 的系统,基本上都使用了开源的一些框架,remote等 ,网上例子很多。这次我们不用任何框架,用flex 和jsp以及 js脚本来实现相互通讯。
        注意,这次介绍只介绍flex部分,java服务器端部分留着下次来介绍。

    先介绍下使用的基本原理:
                     Flex中As调用Js的方法是:
          1、导入包 (import flash.external.ExternalInterface;)
          2、使用ExternalInterface.call("Js函数名称",参数)进行调用,其返回的值就是Js函数所返回的值

     Js调用As的方法是:
          1、导入包 (import flash.external.ExternalInterface;)
          2、在initApp中使用ExternalInterface.addCallback("用于Js调用的函数名",As中的函数名)进行注册下
          3、js中 就可以用document.getElementById("Flas在Html中的ID").注册时设置的函数名(参数)进行调用。

    然后介绍下这次实现的框架的基本功能:
            1、组件和服务器基本的实时通讯,信息交互。
            2、子组件之间的实时相互通讯,信息交互。
            3、加载不同子组件,构成预期的系统。
    接下来是实现的过程原理,以及相关源代码:

           1、声明基本的存储变量和 初始化 主组件
                private var graphId:String;
private var moduleMap:Map=new HashMap();
private var moduleInfo:Object=new Object(); // 所有的IModuleInfo


private function init():void//主组件加载方法
{
flash.system.Security.allowDomain("*");//权限设置
ExternalInterface.addCallback("showMsg", showMsg); // 允许javascript调用


ExternalInterface.addCallback("setGraphMsg", setGraphMsg); // 允许javascript调用
graphId=ExternalInterface.call("getGraphId");//获取图形id
handleStyle(ExternalInterface.call("getGraphStyle"));//获取图形样式
handleStruct(ExternalInterface.call("getGraphStruct"));//获取图形子组件,以及结构,构成
// fullScream();

}
                 2、获取对应图元,用于子组件之间的交互
                          /**
* 根据id获取对应图元
*/
public function getModule(id:String):Module
{
return moduleMap.get(id) as Module;
}

                  3、处理样式
/**
* 处理样式
*/
private function handleStyle(style:String):void
{


var styleXML:XML=new XML(style);
var classList:XMLList=styleXML.elements("class");
for (var i:int=0; i < classList.length(); i++)
{
var classXML:XML=classList[i];
var selector:String=classXML.attribute("name");
if (selector == null)
{
continue;
}
var css:CSSStyleDeclaration=StyleManager.getStyleDeclaration(selector);
var attrList:XMLList=classXML.attributes(); // 所有属性
for (var j:int=0; j < attrList.length(); j++)
{
var attrName:String=attrList[j].name(); // 属性名
var attrValue:String=classXML.attribute(attrName); // 属性值
// name属性为selector
if (attrName != "name")
{
if (attrValue.indexOf(",") > -1)
{
css.setStyle(attrName, attrValue.split(","));
}
else
{
css.setStyle(attrName, attrValue);
}


}
}
}


}
        4、结构处理
                        /**
* 处理图形构成
*/
private function handleStruct(struct:String):void
{


var structXML:XML=null;
var metaList:XMLList=null;
try
{
structXML=new XML(struct);
metaList=structXML.elements("meta");


}
catch (e:Error)
{
Alert.show("错误:" + e.message);
}




for (var i:int=0; i < metaList.length(); i++)
{
var metaXML:XML=metaList[i];


moduleInfo[metaXML.@id]=ModuleManager.getModule(metaXML.@url);
moduleInfo[metaXML.@id].addEventListener(ModuleEvent.READY, moduleLoadReady);
moduleInfo[metaXML.@id].addEventListener(ModuleEvent.ERROR, moduleLoadError);


// 将除url属性全部放到data上
var attributes:Object=new Object();
var attrList:XMLList=metaXML.attributes(); // 所有属性
for (var j:int=0; j < attrList.length(); j++)
{
var attrName:String=attrList[j].name(); // 属性名
var attrValue:String=metaXML.attribute(attrName); // 属性值
if (attrName != "url")
{
attributes[attrName]=attrValue;
}
}
moduleInfo[metaXML.@id].data=attributes;
moduleInfo[metaXML.@id].load();
}


}


/**
* 图元导入完成
*/
private function moduleLoadReady(event:ModuleEvent):void
{
var module:IModuleInfo=event.module;
var meta:Module=module.factory.create() as Module;
meta.data=module.data; // 将所有属性传递给图元
moduleMap.put(module.data.id, meta); // 将新增图元添加到map
// meta.addEventListener(MouseEvent.DOUBLE_CLICK, full);
this.addChild(meta);
}


private function moduleLoadError(event:ModuleEvent):void
{
Alert.show('加载错误,详细错误信息:' + event.errorText);
}




    5、      通讯方法
/ * 接收、设置服务器消息
* 格式:图元标识 + "$" + 消息
*/
public function setGraphMsg(msg:String):void
{
var id:String=msg.substr(0, msg.indexOf("$"));
var module:Module=getModule(id);//得到子组件
// Alert.show(id+":"+msg+":"+msg.substr(msg.indexOf("$") + 1));
module["setGraphMsg"](msg.substr(msg.indexOf("$") + 1));//发送给子组件消息相当于
//module.setGraphMsg(msg.substr(msg.indexOf("$") + 1));
}
6、         发送消息给所有客户端
/**
* 将消息发往所有客户端
*/
public function sendMsgToAllClient(msg:String):void
{
ExternalInterface.call("sendMsgToAllClient", msg);
}

7、jsp中实现,嵌入生成的swf文件 即可,然后相互发送消息
                <script type="text/javascript">
function getGraphId() {//get graph  key
  return document.forms[0].graphId.value;
}
function getGraphStyle() { //get graph style
  return document.forms[0].graphStyle.value;
}
function getGraphStruct() {//get graph struct
  return document.forms[0].graphStruct.value;
}
function setGraphMsg(msgType, msg) {//send message to graph
     document.getElementById("GraphViewer").setGraphMsg(msg);
}
function sendMsgToAllClient(msg){
//异步提交到服务器,服务器作出相应后发送给相应的客户端,
}
</script>

<!-嵌入jsp的flash--->
<table class="tableGrid">
<tr>
<td width="100%" height="100%">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="GraphViewer"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value='graph/swf/GraphViewer.swf?U=<%=U%>' />
<param name="quality" value="high" />
<param name="allowFullScreen" value="true" />
<param name="wmode" value="transparent" />
<param name="allowScriptAccess" value="always" />
<embed src='graph/swf/GraphViewer.swf?U=<%=U%>' quality="high"
name="GraphViewer" play="true" loop="false" quality="high"
allowScriptAccess="always" type="application/x-shockwave-flash"
allowFullScreen="true"
pluginspage="http://www.adobe.com/go/getflashplayer">
</embed>
</object>
</td>
</table>

 

另外,附上用此框架实现的系统截图:

 

 

 

立体库房

 

 

 

自动化检定流水线

自动化流水线组态监控

  • 大小: 78.9 KB
  • 大小: 89.2 KB
0
2
分享到:
评论

相关推荐

    jsp与flex的整合直接拷贝就可以用

    2. 在JSP项目中创建服务端接口和实现,例如使用JavaBean或Servlet处理业务逻辑。 3. 在`web.xml`中配置相应的Servlet来处理Flex的AMF请求。 4. 在Flex客户端,使用`mx.rpc.amf`包中的类(如`AMFChannel`和`...

    Jsp嵌入Flex 、Jsp Flash报表实现源码

    本资源“Jsp嵌入Flex 、Jsp Flash报表实现源码”提供了一种将Flex的图形化展示能力和JSP的数据处理能力结合起来,以创建具有丰富视觉效果和交互性的报表应用的方法。 首先,让我们深入理解JSP和Flex各自的特性: 1...

    JSP调用Flex4组件演示代码

    综上所述,这个项目是一个宝贵的学习资源,有助于开发者理解如何在实际项目中整合JSP和Flex4,实现高效的数据交换和复杂的用户交互。通过分析源代码和运行DEMO,我们可以深入掌握这两种技术的融合,提升Web应用开发...

    flex嵌入jsp所需的完整包4个

    2. flex-bootstrap.jar:这个文件是Flex运行时环境的一部分,包含了Flex框架的基础组件和类库,用于初始化和加载Flex应用程序。Bootstrap类库通常用于启动Flex应用程序,确保正确加载所需的SWF文件和资源。 3. flex...

    FLEX3嵌入到JSP,实现的 jar 包

    在IT行业中,尤其是在Web开发领域...总之,"FLEX3嵌入到JSP,实现的jar包"是一个集合了Flex与JSP集成所需核心组件的资源包,帮助开发者轻松地在Java Web应用中集成Flex功能,创建具有动态交互和丰富用户体验的Web应用。

    Flex和java交互搭建

    在Flex和Java的交互中,BlazeDS是一个关键组件。BlazeDS是Adobe提供的一个免费的服务器端解决方案,它提供了AMF(Action Message Format)协议,使得Flex客户端能够与Java应用服务器进行低延迟、高性能的数据交换。...

    flex与jsp结合使用

    Flex 和 JSP 结合使用是一种常见的前端与后端交互方式,它允许开发人员...综上所述,Flex 和 JSP 的结合使用为构建动态、交互的 Web 应用提供了一个强大的平台,开发者可以通过熟练掌握这种技术来提升应用的用户体验。

    JSP嵌入一个或多个Flex

    **正文** JSP(JavaServer Pages)...通过以上知识点的学习和实践,开发者可以有效地在JSP中嵌入一个或多个Flex模块,创建出功能强大且用户体验优良的Web应用。理解并掌握这些技术,对于提升Web开发能力具有重要意义。

    一个Flex+Jsp+Mysql实现的增删查改例子

    标题中的“一个Flex+Jsp+Mysql实现的增删查改例子”表明这是一个使用Adobe Flex作为前端,JavaServer Pages(JSP)作为后端处理,以及MySQL作为数据库的Web应用示例。这个项目可能是一个基础的教学案例,用于演示...

    FLEX通过JSP与数据库交互

    ### FLEX通过JSP与数据库交互的关键知识点 #### 一、背景介绍 FLEX是一种用于构建高度互动的应用程序的框架,它可以与多种后端...此外,文章还提供了实际的代码示例和配置指南,帮助开发者更好地理解和实现这一过程。

    Flex-jsp两个必要jar包

    这个合并的jar包通常包含了Flex编译器生成的SWC库,比如Flex框架类、Flex组件库、 BlazeDS或LiveCycle Data Services的相关类等。开发者在JSP环境中使用Flex时,需要这个jar包来确保所有必要的Flex运行时环境已经...

    flex整合JSP

    在IT行业中,Flex是一种基于Adobe Flash技术的开源框架,用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的数据通信能力,尤其适合创建动态、交互性强的Web应用。而JSP(JavaServer Pages)是...

    JSP+Flex+javaSocket+jquery+ajax聊天

    【JSP+Flex+JavaSocket+jQuery+Ajax聊天】是一个技术综合的应用实例,它整合了多种前端和后端技术,为用户提供类似QQ的聊天体验。下面将分别介绍这些技术及其在聊天应用中的作用。 **JSP(JavaServer Pages)**是...

    flex jsp 嵌套 swf html

    4. **JSP交互**:为了使Flex应用与JSP进行数据交互,可以使用AMF(Action Message Format)协议。AMF是一种高效的数据交换格式,Flex SDK和 BlazeDS(一个开源的Java服务器)支持AMF,使得Flex应用能够方便地调用JSP...

    flex嵌入JSP

    总之,将Flex嵌入JSP页面是一个涉及前端和后端多方面技术的过程。解决遮挡问题需要综合运用HTML、CSS、JavaScript以及Flex和JSP的相关知识。通过不断学习和实践,我们可以有效地解决这类问题,创建出既美观又功能...

    flex嵌入jsp心得

    标题与描述概述的知识点是关于如何将Flex框架嵌入到JSP页面中,以实现更丰富的数据可视化功能,特别是图表的展示。以下是基于标题、描述、标签以及部分内容的详细解析和扩展。 ### Flex嵌入JSP开发心得 #### 1. ...

    flex解决JSP遮盖

    5. **Flex与JSP的通信**:如果Flex应用和JSP页面需要紧密交互,可以利用Flex的ExternalInterface或Ajax技术实现两者之间的通信,动态地调整Z-index或其他CSS属性,以达到理想的显示效果。 6. **重新设计布局**:在...

    Flex和jsp整合实践

    为了实现Flex和JSP的通信,我们需要配置一个后台服务,如 BlazeDS 或 LCDS(LiveCycle Data Services),它们提供了AMF(Action Message Format)协议,能够高效地传输数据。在Flex客户端,我们可以使用HTTPService...

Global site tag (gtag.js) - Google Analytics