[BlazeDS]getWriter() has already been called for this response

王者_来归 2013-05-19 11:19:01
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,是不是整合的时候,哪里不正确啊!
请各位高手赐教!
忠心祝愿各位工作愉快!
谢谢!
...全文
241 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
王者_来归 2013-05-20
  • 打赏
  • 举报
回复
引用 5 楼 xiaoliouc 的回复:
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/
那其实不管是使用flex调用spring的service,还是通过struts的action再调用spring的service,理论上应该是一样的,因为我在ssh中使用的是全泛型,每一个实体的操作,没有对应的service,实体去找对应的service是通过struts的action调用类来实现的。
子晓聊技术 2013-05-20
  • 打赏
  • 举报
回复
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/
王者_来归 2013-05-20
  • 打赏
  • 举报
回复
首先,
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这个接口有关啊? 晚上回去我重新建一个类来测试一下!
  • 打赏
  • 举报
回复
贴代码,。说不清
王者_来归 2013-05-20
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
在用到getWriter之前,response.reset();下
我加过这句的, 但是程序并没有运行到getWriter()这一步啊,我在运行到这一步的时候加了断点,也加了输出观察,都没有运行到。
  • 打赏
  • 举报
回复
在用到getWriter之前,response.reset();下
lt3 2013-05-20
  • 打赏
  • 举报
回复
目前也正在研究flex, 希望牛人能指点指点, 我是要使用flex实现动态网络拓扑图的; 怎样, 给点建议

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧