Grails控制器可以在操作完成之前动态地向视图返回更新吗?

时间:2012-03-09 13:21:31

标签: ajax grails

现状

我正在执行一个外部应用程序(使用Runtime.getRuntime().exec ...示例here),我正在监听应用程序将stdout写入的流。 该部分按预期工作,我得到结果(在grails控制器中),逐行,因为它们可用,并且 - 当流没有更多内容时 - 我在页面上呈现结果

其他方面是从gsp页面异步启动该应用程序。这也已经被覆盖并且进行了remoteFunction调用(对于上面提到的控制器方法),结果被收集并返回,并且它们被正确地显示在页面上的指定区域中。


但是,烦扰我的是什么以及我实际想要实现的目标是:

目标

显示从流中读取的行,而不是在整个流完成后(现在已完成)。

这意味着(例如,类似于)为Stream-reading循环中的每一行调用render:

while ((line = bri.readLine()) != null) {
  System.out.println(line);
  //render line here?
}

这可以实现吗?

请解释:)

1 个答案:

答案 0 :(得分:2)

我认为没有标准的grails方法来实现你想要的行为。

g:remoteFunction仍然是一个包装AJAX请求的标记。请求受限于请求响应模式 - 您无法获得一个请求的多个响应。 您的操作代码不会自动修改。

您必须自己实施。

我会尝试以下方法:

  • 将您的单个remoteFunction调用拆分为多个AJAX请求
  • 第一个请求初始化一个新线程,它会监听您的外部应用程序。
  • 此应用程序的结果必须存储在会话范围中,以便......
  • 来自客户端的以下定期请求可以轮询当前的执行状态。