使用 WebFlowEditor 开发SWF应用

原创 2005年05月31日 16:09:00

使用 WebFlowEditor 开发SWF应用

转自:http://www.nirvanastudio.org/nicholas/SWFEditor.htm

如果你还不了解Spring Web Flow,请参考Spring Web Flow这篇文章。

如果你已经开始对Spring Web Flow感兴趣了,那么我们开始着手了解如何独自开发SWF应用了。

首先,一个好的开发环境能够节省很多时间,这里我介绍一下如何使用Eclipse + WebFlowEditor开发SWF应用。

安装:

  1. 下载Eclipse,我用的是3.1 M6版本。
  2. 下载Spring Framework和Spring Web Flow
  3. 安装plug-in,首先要装一个Spring IDE,之后要装Eclipse GEF,最后装Spring WebFlowEditor。

安装插件可以通过Help->Software Updates->Find and Install->Search for new festures to install->New Remote Site的办法,添加插件下载页的方式直接通过eclipse下载安装。

Spring IDE: http://springide.org/updatesite/
WebFlowEditor: http://springide.org/updatesite_dev
GET: 通过默认的Eclipse.org update site安装,或者直接从eclipse网站下载安装

配置:

  1. 新建一个Java Project,在Package Explorer选中项目点右键选择Add Spring Project Nature
  2. 我认为是很重要的一点,很多朋友都很疑惑Spring IDE在哪里,其实默认情况下这个View并没有显示出来,我们在Window->Show View->Other里面添加它到开发界面上。其实Spring IDE和Spring WebFlow的最大特点也就是能够以图形的方式直观的给人一个大体的映像,这样一来就能很好的看清Beans之间的联系。
  3. 在Spring Beans和Spring WebFlow里面添加配置信息,主要就是设定applicationContext.xml和xxxFlow.xml(Web Flow 定义),一切配置好后,就可以Show Graph和Show WebFlow Editor的方式显示出图形界面。有图形界面做起来就方便多啦:-)

图1 - Spring IDE 视图

第一个应用:

这个例子来源于Spring Web Flow发行包内的例子 - fileupload,这是一个很简单的例子,流程也很简单。它采用了Spring MVC,最后我尝试着将它转换成Struts MVC。

在WEB-INF下的upload-flow.xml如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE webflow PUBLIC "-//SPRING//DTD WEBFLOW//EN"
	"http://www.springframework.org/dtd/spring-webflow.dtd">

<webflow id="upload" start-state="selectFile.view">

	<view-state id="selectFile.view" view="selectFile.view">
		<transition on="submit" to="bindAndValidate"/>
	</view-state>

	<action-state id="bindAndValidate">
		<action bean="upload.process"/>
		<transition on="success" to="confirmation.view"/>
		<transition on="error" to="selectFile.view"/>
	</action-state>
	
	<view-state id="confirmation.view" view="confirmation.view">
		<transition on="back" to="selectFile.view"/>
	</view-state>
	
</webflow>
通过Spring Web Flow Editor生成的流程图如下:

图2- fileupload 流程

在这个应用里,所有的view都放在了WEB-INF/jsp里面,每个标单里面必须有这样一个隐藏域:

<INPUT type="hidden" name="_flowExecutionId" value="<%=request.getAttribute("flowExecutionId") %>">

用于SWF判断流程执行位置。

SelectFile.view ==> WEB-INF/jsp/selectFile.view.jsp,在这个View里面还有一个隐藏域:

<INPUT type="hidden" name="_eventId" value="submit">

这个用于表示事件ID,就是transition的on属性,这样标示就能让spring知道执行哪个transitioin了。

与Struts集成:

Spring提供的例子是与Spring MVC集成的,我尝试将它换成了Struts。

1、在struts-config.xml里面加入Spring Plugin,并且定义SWF入口:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>

   <form-beans> 
      <form-bean name="actionForm" type="org.springframework.web.struts.BindingActionForm"/> 
   </form-beans> 
   
	<global-forwards>
		<forward name="" path="/WEB-INF/jsp/confirmation.view.jsp" />
		<forward name="" path="/WEB-INF/jsp/selectFile.view.jsp" />
	</global-forwards>

	<action-mappings>
		<action path="/upload" 
			type=""
			name="actionForm" scope="request" 
			className="org.springframework.web.flow.struts.FlowActionMapping">
			
		</action>
	</action-mappings>

	<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
		<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
	</plug-in>

</struts-config>

关于view的映射需要使用action forwards,典型的做法是定义成全局的(SWF JavaDocs上介绍)。

定义SWF入口是最重要的,如果不定义,SWF是无法启动的。同时要启动一个Web流程,你需要传递一个flowId给控制器,这里FlowAction包含了一个全局的控制器(详细内容查SWF JavaDocs)。upload这个属性值很重要,他是你的webflow的id号,你可能有多个webflow,用它标示你需要启动的那个。当然还有其他的启动办法,另外的例子上有介绍。

3、编写完整的applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	<bean id="upload" class="org.springframework.web.flow.config.FlowFactoryBean">
		<property name="flowBuilder">
			<bean class="org.springframework.web.flow.config.XmlFlowBuilder">
				<property name="resource" value="/WEB-INF/upload-flow.xml"/>
			</bean>
		</property>
	</bean>
	
	<bean id="upload.process" class="org.springframework.samples.fileupload.web.flow.ProcessUploadAction">
		<property name="formObjectName" value="file"/>
		<property name="formObjectClass" value="org.springframework.samples.fileupload.web.flow.FileUploadBean"/>
	</bean>
</beans>

4、编写web.xml以加载Struts和Spring:

<?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp">

	<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

结论:

由于没有细看SWF提供的例子,birthdate就是一个Struts + Spring的例子,害得我捉摸了半天......

birthday的例子中提供了Spring MVC和Struts的配置的对比,就是没有讲解,也让人看得很郁闷。

SWF与Struts是两个独立的模块,SWF设计者的初衷是实现最大程度的重用,也就是说SWF开发和Struts开发是相对独立的。不仅是Struts,包括Spring MVC和Spring Portlet MVC都是与之独立的。使用Struts仅仅是作为一个启动WebFlow的入口,就像Spring MVC一样,与之不同的是Struts使用struts-config.xml配合applicationContext配置启动WebFlow入口,而Spring MVC只需要直接定义在applicationContext配置里面,因为Spring都是一家子的东西嘛。

从前一篇翻译的文章里可以看到,Action State的实现是继承org.springframework.web.flow.action包里面的类,而不是针对特定的MVC框架,那么他们是如何通讯的呢。那就是Context对象模式(Context Object Pattern),属于J2EE的表现层模式,可以参考J2EE Core Pattern这个书,上面介绍的详细。这个Context对象提供了在一个全局应用中使用的与协议无关的封装后的对象。这样就为了把SWF和MVC框架分开。

作者:

Nicholas@NirvanaStudio

<script type="text/javascript"> &lt;!-- google_ad_client = "pub-4465827781731051"; google_ad_width = 234; google_ad_height = 60; google_ad_format = "234x60_as"; google_ad_type = "text_image"; google_ad_channel =""; //--&gt; </script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script><iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4465827781731051&amp;dt=1126779292515&amp;format=234x60_as&amp;output=html&amp;ad_type=text_image&amp;nloc=http://blog.csdn.net/fckeditor/editor/fckeditor.html?InstanceName=Editor_Edit_FCKEditor&amp;Toolbar=Default&amp;u_h=768&amp;u_w=1024&amp;u_ah=740&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=21&amp;u_java=true" frameborder="0" width="234" scrolling="no" height="60" allowtransparency="65535"></iframe>

发布一款新开发的阅读器(flex),支持doc,jpeg,pdf,swf,ppt,excel等

主要功能: 1.支持swf,jpeg数据源 2.电子书边下载边观看 3.滚动,单页,双页(翻书效果动画),列表显示。 4.图像平滑缩放,不失真。 5.电子书目录,搜索,书签,翻页音效等。 ...
  • Iambest
  • Iambest
  • 2011年10月11日 10:31
  • 1710

Flex开发中如何给SWF传递外部提供的参数

在SWF中嵌入另外一个SWF程序时,有时会碰到如何将外部的业务参数传递给内部的SWF文件,这时候就可以利用flashvars,具体可以将参数配置到对应SWF文件的html文件中,具体配置如下。 1....

flvplayer.swf flv视频播放器使用方法

今天由于网页上要加入一个视频文件,就研究了一下flv视频播放器flvplayer.swf 一、直接在html文件中加载: 复制代码 代码如下: ...
  • ben1247
  • ben1247
  • 2011年05月05日 14:35
  • 2178

使用uploadImage.swf实现多图片上传

可以依此实现图片批量上传,是不是有点酷!网上好多上传图片完成后,并没有给出回调函数如何呈现图片的方法,虽然对于聪明伶俐的你们,这都不是事。...

selenium部分功能(上传文件、swf插件)无法自动化时可使用的方法

selenium是一个相当方便的东西,但是有些功能它也并不能完成,比如上传文件,swf插件的点击操作,和各种不在web中需要在Windows进行相关的操作。 我再录制selenium脚本的时候碰...

使用Loader/URLLoader/URLStream载入外部swf并获取类定义

在游戏开发的过程中,经常需要将游戏资源放在外部swf中。本文讨论的就是在使用AS3载入外部的资源swf,并将其中的资源转换为类定义时要注意的一些东西。 我建立了两个swf,一个为LoadAppDom...

关于使用SharedObject来缓存游戏图片或者swf文件资源到客户端本地的研究

目前市面上已经有很多游戏采用了把图片缓存到玩家客户端的做法,这种方法有利有弊,因为并不是所有的玩家都希望自己的电脑的某个角落被放入过多的缓存文件,久而久之造成电脑性能下降;但是总的来说这种技术还是好的...
  • txiejun
  • txiejun
  • 2011年11月05日 01:02
  • 3478

Java开发七牛云存储 ,上传视频与图片文件 , 页面播放器GrindPlayer.swf

七牛的云存储还是比较强大的 , 可以上传文件(什么格式都可以) , 而且还可以对上传的文件进行转码等操作. 我在项目中用到的也只是很小的一部分.七牛上传文件需要四个参数: 一.注册完账号以后会...

Google开发的Flash Pro 新插件可将SWF文件转换为Web格式

消息称专业版Flash中加入Google推出的一个新插件,用户使用该插件能够在Flash Pro中直接将SWF文件转换为HTML代码。 通过使用Google的在线Swiffy服务,Goo...
  • ydj9931
  • ydj9931
  • 2011年11月30日 18:42
  • 1047
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 WebFlowEditor 开发SWF应用
举报原因:
原因补充:

(最多只允许输入30个字)