【发布时间】: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