Ajax grails controller能否在操作完成之前动态返回视图更新? 现状
我正在执行一个外部应用程序(通过使用Ajax grails controller能否在操作完成之前动态返回视图更新? 现状,ajax,grails,Ajax,Grails,我正在执行一个外部应用程序(通过使用Runtime.getRuntime().exec…示例),我正在监听应用程序写入stdout的流。 该部分按预期工作,我(在grails controller中)逐行获得结果,因为它们是可用的,并且——当流没有更多内容时——我在页面上呈现结果 另一个方面是从gsp页面异步启动该应用程序。这一点也已经涉及到,并且(对上述控制器方法)进行了remoteFunction调用,收集并返回结果,结果将正确显示在页面上的指定区域 但是,困扰我和我真正想要实现的是: 目
Runtime.getRuntime().exec
…示例),我正在监听应用程序写入stdout的流。
该部分按预期工作,我(在grails controller中)逐行获得结果,因为它们是可用的,并且——当流没有更多内容时——我在页面上呈现结果
另一个方面是从gsp页面异步启动该应用程序。这一点也已经涉及到,并且(对上述控制器方法)进行了remoteFunction调用,收集并返回结果,结果将正确显示在页面上的指定区域
但是,困扰我和我真正想要实现的是: 目标 在读取流时显示从流中读取的行,而不是在整个流完成后(现在是这样) 这意味着(例如)为流读取循环中的每一行调用render:
while ((line = bri.readLine()) != null) {
System.out.println(line);
//render line here?
}
这能实现吗
请解释:)我认为没有标准的grails方法来实现您想要的行为 ist仍然是为您包装AJAX请求的标记。请求受限于请求-响应模式-一个请求不能得到多个响应。 您的操作代码不会自动修改 你必须自己实现它 我会尝试以下方法:
- 将单个remoteFunction调用拆分为多个AJAX请求李>
- 第一个请求初始化侦听外部应用程序的新线程李>
- 此应用程序的结果必须存储在会话范围内,以便
- 来自客户端的以下定期请求可以轮询当前执行状态
flush
。@TedNaleid“模拟器”是一个DOS批处理脚本,其中有多行sleep 1
。System.out(在流读取器循环中)在行出现时打印行。问题是,我无法在页面上显示相同的内容,但只有在控制器方法退出后(即,当remoteFunction中的onComplete
被回调时)才能显示。我今天会尝试一下,让你知道。它很有效。感谢@Aiolos为我指明了正确的方向:)