Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax grails controller能否在操作完成之前动态返回视图更新? 现状_Ajax_Grails - Fatal编程技术网

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为我指明了正确的方向:)