【问题标题】:In Grails can I have a View with a waitFor tag?在 Grails 中,我可以有一个带有 waitFor 标签的视图吗?
【发布时间】:2013-06-14 01:16:15
【问题描述】:

我正在学习 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})> ?我没有这样的工作。

【问题讨论】:

  • 您想要的一种方式asynchronous(即开即弃),您想要的另一种方式waitFor。他们不是矛盾的吗?

标签: grails asynchronous view executor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多