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