我对Grails应用程序有疑问。我有一个控制器,在服务器端做了很多工作,可能需要几分钟才能完成它的任务。我担心如果用户在代码运行时点击刷新,它将尝试再次运行代码。我该如何阻止这一点。下面是一些伪代码
def refreshDb = {
requeryDataBase()
}
public void requeryDatabase(){
....some long process here
}
那么,如果requeryDataBase()已经在运行,我将如何阻止它运行?
感谢您的帮助或见解! 杰森
答案 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
}
}