SSH整合flex4.6出现的问题:
1、没有整合flex之前,ssh是能够正常运行的。
2、flex没有整合ssh,只整合java的时候,也是可能正常运行的。
3、整合flex到ssh的时候,配置与之前整合java的配置一样:
在web.xml中增加如下代码:<display-name>BlazeDS</display-name>
    <description>BlazeDS Application</description>
      <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>在remoting-config.xml中配置如下:
<default-channels>
        <channel ref="my-amf"/>
    </default-channels>
<destination id="ssh_flex">
<adapter ref="java-object" />
<properties>
<source>com.text.SSHFlex</source>
</properties>
</destination>启动tomcat,然后输入:
http://127.0.0.1/Test/messagebroker/amf
没的报错(据说不报错说明整合成功)。
新建flex项目,在连接服务端的时候,验证通过。
以下是mxml的部分内容:protected function application1_creationCompleteHandler():void
{
     text_flex.sayHello("helloWorld");
}
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<s:RemoteObject id="text_flex" showBusyCursor="true" destination="ssh_flex"
result="text_resultHandler(event)"
 fault="text_faultHandler(event)" endpoint="http://127.0.0.1/Test/messagebroker/amf"/>
</fx:Declarations>
我在sayHello这个方法中加了断点,调试运行的时候,根本没有进去就报错了:
[BlazeDS]getWriter() has already been called for this response
java.lang.IllegalStateException: getWriter() has already been called for this response我是刚学的flex,是不是整合的时候,哪里不正确啊!
请各位高手赐教!
忠心祝愿各位工作愉快!
谢谢!JavaFlexSSH

解决方案 »

  1.   

    在用到getWriter之前,response.reset();下
      

  2.   

    我加过这句的,
    但是程序并没有运行到getWriter()这一步啊,我在运行到这一步的时候加了断点,也加了输出观察,都没有运行到。
      

  3.   

    首先,
    public class SSHFlex extends ActionSupport implements ModelDriven<Object>,ServletRequestAware {

        protected void initAction() {
    this.response.setCharacterEncoding("utf-8");
    this.response.setContentType("text/html,charset=utf-8");
    try {
    this.request.setCharacterEncoding("utf-8");
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
    this.out = this.response.getWriter();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
         public String sayHello(String name) {
     System.out.println("initAction");
            initAction();
     System.out.println("initAction end")
            if(name == null || "".equals(name)) {
    return "请告诉我你的名字!";
    }   
              return "hello " + name;
      }
    }在执行initAction()之前,理论上先打印出"initAction",但是却没有打印,说明代码没有执行到这信方法内就报错了。
    会不会与我这个类实现了ServletRequestAware这个接口有关啊?
    晚上回去我重新建一个类来测试一下!
      

  4.   

    flex没有整合ssh,只整合java的时候,也是可能正常运行的。这个说明通过BlazeDS与java端交互是正确的。看了看你的代码
    public class SSHFlex extends ActionSupport implements ModelDriven<Object>,ServletRequestAware 
    这个地方有问题,一般来说,ssh项目与flex整合,其实是Flex与Spring结合,而不是与struts发生关系,因为你是用flex调用spring的service方法,service再请求dao。你看看这篇文章http://blog.163.com/wsslian@126/blog/static/77635189201264102143817/
      

  5.   

    那其实不管是使用flex调用spring的service,还是通过struts的action再调用spring的service,理论上应该是一样的,因为我在ssh中使用的是全泛型,每一个实体的操作,没有对应的service,实体去找对应的service是通过struts的action调用类来实现的。
      

  6.   

    目前也正在研究flex, 希望牛人能指点指点, 我是要使用flex实现动态网络拓扑图的; 
    怎样, 给点建议