现状
我正在执行一个外部应用程序(通过使用 Runtime.getRuntime().exec
... example here )并且我正在监听应用程序将 stdout 写入的 Stream。
该部分按预期工作并且我得到了结果(在 grails Controller 中),逐行,因为它们可用,并且 - 当流没有更多内容时 - 我在页面上呈现结果.
另一方面是从 gsp 页面异步启动该应用程序。这也已经涵盖并进行了 remoteFunction 调用(对上述 Controller 方法),收集并返回结果,并将它们正确显示在页面上的指定区域。
但是,困扰我和我真正想要实现的是:
目标
在读取时显示从流中读取的行,而不是在整个流完成之后(就像现在完成的那样)。
这意味着(例如,类似于)为流读取循环中的每一行调用渲染:
while ((line = bri.readLine()) != null) {
System.out.println(line);
//render line here?
}
这能实现吗?
请解释:)
最佳答案
我认为没有标准的 Grails 方法可以实现您想要的行为。
g:remoteFunction它仍然是一个为您包装 AJAX 请求的标签。请求受请求响应模式的限制——您不能为一个请求获得多个响应。 您的操作代码不会自动修改。
您必须自己实现。
我会尝试以下方法:
- 将单个 remoteFunction 调用拆分为多个 AJAX 请求。
- 第一个请求会初始化一个新线程,它会监听您的外部应用程序。
- 此应用程序的结果必须存储在 session 范围,以便...
- 来自客户端的以下定期请求可以轮询当前的执行状态。
关于ajax - Grails Controller 能否在操作完成之前动态返回对 View 的更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9634734/