手把手教你使用flex eclipse整合spring

Flex 是一個高效、免費的開源框架,可用於構建具有表現力的 Web應用程序,這些應用程序利用Adobe Flash Player和Adobe AIR, 可以實現跨瀏覽器、桌面和操作系統。我們今天就來好好研究下他

最先下載FlashBuilder_4_7_LS10_win64.exe試了幾個eclipse安裝插件都沒成功,包括myeclipse8.5、spring sts2.9.2、eclipse3.5、j2eeeclipse版本4.2.0,後來搞了一個FlashBuilder_4_LS10.exe安裝完找不到插件安裝文件原來這個是單獨版,必須插件版才行,最後下載FlashBuilder_4_Plugin_LS10.exe終於配置成功了,myeclipse8.5不行,spring sts可以了。

spring sts部署應用跟myeclipse不一樣,比較類似eclipse。

用sts整合flex和java有幾個步驟:

1:新建動態web工程flexweb,創建web.xml

2: blazeds-turnkey-4.0.0.14931.zip解壓, 複製blazed兩個文件夾flex和lib到WEB-INF下,裏面是blaze的jar包和flex配置文件,然後修改web.xml加入blaze支持

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

 
 <!-- MessageBroker Servlet -->
 <servlet>
  <servlet-name>MessageBrokerServlet</servlet-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>

3:項目右鍵,添加/更改項目類型>添加flex類型項目,第一步,應用程序類型選擇J2EE,下方選擇BlazeDS,第二部根文件夾填入項目在workspase的路徑加一個WebContent,如E:\workspaces\sts\flexweb\WebContent,根URL填http://localhost:8080/flexweb,上下文根目錄/flexweb,輸出文件夾使用默認E:\workspaces\sts\flexweb\WebContent\flexweb-debug,點擊finish
4:轉換完成後,目錄有些變化,右鍵項目>properties>flex構建路徑,主源文件夾改爲flex_src,然後把自動生成的src目錄下的flexweb.mxml移動到flex_src下,環境搭建就算完成了

HelloWorld

flexweb.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"   
     xmlns:s="library://ns.adobe.com/flex/spark"   
     xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">  
 
 <fx:Script>  
  <![CDATA[  
   import mx.controls.Alert;  
   import mx.rpc.events.ResultEvent;  
   
   protected function myFlex_resultHandler(event:ResultEvent):void{  
    var name:String=event.result as String;  
    Alert.show(name);  
   }  
   protected function button1_clickHandler(event:MouseEvent):void  
   {   
    myFlex.sayHello(txtName.text);  
   }  
  ]]>  
 </fx:Script>  
 
 <fx:Declarations>  
  <!-- 將非可視元素(例如服務、值對象)放在此處 -->  
  <s:RemoteObject id="myFlex" destination="mytest" result="myFlex_resultHandler(event)"/>  
 </fx:Declarations>  
 <s:Button x="209" y="135" label="按鈕" click="button1_clickHandler(event)"/>  
 <s:TextInput x="166" y="81" id="txtName"/>  
 <s:Label x="10" y="81" text="請輸入內容:" fontSize="15" fontWeight="bold" fontFamily="中易黑體"/>  
</s:Application>

其中

<s:RemoteObject id="myFlex" destination="mytest" result="myFlex_resultHandler(event)"/>

指定了一個調用Java的類Hello,mytest對應到remoting-config.xml

在WEB-INFO/flex目錄下remoting-config.xml加入

<destination id="mytest">
    <properties>
      <source>com.hongbo.Hello</source>
    </properties>
  </destination>

result對應的是java方法調用的回調函數
建一個普通java類

package com.hongbo;

public class Hello {

 public String sayHello(String name){
  System.out.println("------------------------------------");
  return "Hello First Demo " + name;
 }
}

這樣就OK了

訪問路徑是http://localhost:8080/flexweb/flexweb-debug/flexweb.html


第一次會報404,problems提示無法創建html包裝器,右鍵點擊重新創建模板

添加Spring支持

1:web.xml加入

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/classes/applicationContext.xml </param-value>
 </context-param>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

2:src下創建applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

 <bean id="hello" class="com.hongbo.Hello">
  <property name="testSpring">
   <ref bean="testSpring"/>
  </property>
 </bean>
 <bean id="testSpring" class="com.hongbo.test.impl.TestSpringImpl"/>
</beans>

3:WEB-INF/flex/service-config.xml加入

<factories>
   <factory id="spring" class="com.hongbo.SpringFactory" /> 
 </factories>

添加java類

package com.hongbo;


import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import flex.messaging.FactoryInstance;
import flex.messaging.FlexFactory;
import flex.messaging.config.ConfigMap;
import flex.messaging.services.ServiceException;
public class SpringFactory implements FlexFactory {
 private static final String SOURCE = "source";

 public void initialize(String id, ConfigMap configMap) {
 }

 public FactoryInstance createFactoryInstance(String id, ConfigMap properties) {
  SpringFactoryInstance instance = new SpringFactoryInstance(this, id,
    properties);
  instance.setSource(properties.getPropertyAsString(SOURCE, instance
    .getId()));
  return instance;
 } // end method createFactoryInstance()  

 public Object lookup(FactoryInstance inst) {
  SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
  return factoryInstance.lookup();
 }

 static class SpringFactoryInstance extends FactoryInstance {
  SpringFactoryInstance(SpringFactory factory, String id,
    ConfigMap properties) {
   super(factory, id, properties);
  }

  public String toString() {
   return "SpringFactory instance for id=" + getId() + " source="
     + getSource() + " scope=" + getScope();
  }

  public Object lookup() {
   ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext());
   String beanName = getSource();

   try {
    return appContext.getBean(beanName);
   } catch (NoSuchBeanDefinitionException nexc) {
    ServiceException e = new ServiceException();
    String msg = "Spring service named '" + beanName
      + "' does not exist.";
    e.setMessage(msg);
    e.setRootCause(nexc);
    e.setDetails(msg);
    e.setCode("Server.Processing");
    throw e;
   } catch (BeansException bexc) {
    ServiceException e = new ServiceException();
    String msg = "Unable to create Spring service named '"
      + beanName + "' ";
    e.setMessage(msg);
    e.setRootCause(bexc);
    e.setDetails(msg);
    e.setCode("Server.Processing");
    throw e;
   }
  }

 }

}

4:修改remoting-config.xml

<destination id="mytest">
    <properties>
     <factory>spring</factory>
      <source>hello</source>
    </properties>
  </destination>

5:修改相應的Java類

package com.hongbo;

import com.hongbo.test.TestSpring;

public class Hello {

 private TestSpring testSpring;
 
 public void setTestSpring(TestSpring testSpring) {
  this.testSpring = testSpring;
 }
 
 public String sayHello(String name){
  return testSpring.testSpring(name);
 }
}
package com.hongbo.test;

public interface TestSpring {

 String testSpring(String name);
}
package com.hongbo.test.impl;

import com.hongbo.test.TestSpring;

public class TestSpringImpl implements TestSpring{

 public String testSpring(String name){
  System.out.println("test spring-------------------------------------"+name);
  return "test spring "+name;
 }
}

最後,flex打印語句trace不會打印到控制檯,要先卸載flashplayer再安裝一個debuger版的flashplayer,下載flashplayer_uninstall.zip,卸載,下載flashplayer10r12_36_winax_debug.exe,安裝,卸載安裝後好像谷歌瀏覽器沒影響,然後eclipse修改默認瀏覽器爲IE,window>preferences>General>Web browser,選擇Internet Explorer,最後還有,啓動tomcat後,必須在mxml上面右鍵debug運行,打開的IE纔會打印trace,直接訪問網址是不行的。
如有遺漏請指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章