如果grails服务器端代码已在运行,如何防止它运行

时间:2011-07-27 22:25:07

标签: grails groovy grails-controller

我对Grails应用程序有疑问。我有一个控制器,在服务器端做了很多工作,可能需要几分钟才能完成它的任务。我担心如果用户在代码运行时点击刷新,它将尝试再次运行代码。我该如何阻止这一点。下面是一些伪代码

 def refreshDb = {      
    requeryDataBase()
}

  public void requeryDatabase(){

    ....some long process here
  }

那么,如果requeryDataBase()已经在运行,我将如何阻止它运行?

感谢您的帮助或见解! 杰森

2 个答案:

答案 0 :(得分:3)

您应该查看使用网络请求提交form token。它存储一次性令牌,以便不允许多次提交并且可以检测到。请参阅grails framework docs on handling duplicate submissions for more details

答案 1 :(得分:1)

如果您希望多个用户能够使用控制器,则使用会话对象可以使用以下内容。

  public void requeryDatabase(){
if (session['queryRunning']==false) {
   session['queryRunning']=true
    ....some long process here
session['queryRunning']=false //set to false so the user can execute the controller again
}
 else {
   //Put code to notify the user to be pacient here
}
  }