0

我正在学习 Grails,并拥有这个 Web 应用程序。

我从一个视图开始,该视图的表单具有如下字段: <g:field name="phoneNumber"/>

此表单提交给具有较长过程的控制器(它在电话号码上运行 sip load)。我异步运行这个过程(使用grails executor plugin)。

class SipcallController {
    def placeCall() { 
        runAsync {
          if(params?.textCall) {
            def sipcli = "sipcli ${params.phoneNumber} -d ${params.env} -l 3 -t ${params.textCall}".execute()   
            [view_data:sipcli.text]
          } else {
            render "No Value Entered"
          } 
        }
    }
}

有用。用户不必等待 sip 电话呼叫(以前他们会等到控制器的电话呼叫完成,然后转到结果页面查看数据)。

它们现在被发送到结果页面。但是,一旦在控制器所在的同一视图中完成后,我想显示来自控制器的值(结果页面。)

如果我在页面中放置类似${view_data}的内容,则会在页面加载时出错,说“无法在空对象上调用方法”,因为进行电话呼叫的方法尚未完成。

问题:

如何加载视图并在标签上等待,以便在控制器的进程完成时加载数据?我可以做类似的事情 <g:WaitFor({$view_data})>吗?我没有这样的工作。

4

1 回答 1

1

如果您在后台完成该过程后尝试将数据推送到视图,您可能需要使用 AjaxPush/Comet 或 WebSocket 框架之一。看看Atmosphere Plugincometd Plugin看看它们是否能帮助你完成你想要的。

于 2013-06-14T01:39:52.083 回答