使用Quartz触发Javascript弹出窗口

时间:2014-06-10 15:30:43

标签: grails groovy quartz-scheduler

我正在使用Grails应用程序。这个应用程序有一个提醒功能,我希望Grails定期检查是否有开放提醒。这是使用Quartz-plugin完成的。如果找到打开的提醒,我想显示一个弹出窗口(使用Javascript警报)。这是如何工作的?

这就是我现在所拥有的:

作业

class checkRemindersJob {

    HomeController myHome = new HomeController()

    static triggers = { cron name: 'myTrigger', cronExpression: "0 * * ? * *" }

    def execute() {
        myHome.checkReminder()
    }
}

控制器主页

def checkReminder(){

    def myRem = Reminders.findAllBy...
    if( myRem.size > 0 ) triggerReminders( myRem )
}

def triggerReminders( ArrayList myRem ){

    for( x in myRem ) {
        if(...) triggerPopup()
    }
}

def triggerPopup(){
    ????
}

2 个答案:

答案 0 :(得分:1)

听起来您可以使用轻量级REST API来攻击此挑战并在JavaScript中执行计时:

  • Grails应用程序有一个Reminder,它作为REST资源公开
  • 客户端上的JavaScript定期调用REST资源并更新本地列表
  • 如果列表发生更改,JS会触发UI事件。

通过这种方式,您可以让客户端轮询您的服务器,该服务器遵循标准模型正常的Web请求。

如果您希望Grails服务器将消息推送到客户端,您需要查看WebRTC或WebSockets等技术,这些技术可以保持双向通道的打开,但这听起来像是您想要实现的目标。

答案 1 :(得分:1)

您的方法无法正常工作,因为您无法从Quartz作业中触发JavaScript。此外,您的Quartz作业正在实例化并调用控制器操作,这是不推荐的(并且不太可能起作用)。

相反,请尝试以下

  • 使用JavaScript setInterval()函数重复向HomeController.checkReminder
  • 发出AJAX请求
  • 此操作应以JSON格式返回提醒数据
  • AJAX请求的回调应该读取提醒数据,如果有打开的提醒则显示弹出窗口