Vaadin应用程序:处理应用程序关闭事件

时间:2012-05-24 07:39:08

标签: java portlet vaadin

我有一个包含不同可用portlet的门户网站。我的Activity portlet有一些后台线程,在卸载portlet时必须停止(例如,选择另一个portlet时)。 Activity portlet是类GenericPortletApplication,它实现了以下接口:

import com.vaadin.Application;
import com.vaadin.terminal.gwt.server.PortletApplicationContext2;

public abstract class GenericPortletApplication extends Application implements PortletApplicationContext2.PortletListener {
...
}

我想知道我可以重载哪种方法以确保我能正确处理应用程序的关闭。我试过了destroy但是没有实现。

接口定义为herehere,但我找不到卸载应用程序时将调用的方法。

3 个答案:

答案 0 :(得分:3)

我已经成功实现了我认为你想要做的事情。这是我使用的代码:

JavaScript.getCurrent().addFunction("closeMyApplication", new JavaScriptFunction() {
                     @Override
                     public void call(JSONArray arguments)
                             throws JSONException {
                         // call close method
                         close();                        
                     }


              });

        Page.getCurrent().getJavaScript().execute("window.onbeforeunload = function (e) { var e = e || window.event; closeMyApplication(); return; };");

答案 1 :(得分:1)

请注意,只要按下mailto链接,Google Chrome和Opera就会触发onb​​eforeunload,但不会触发onunload。因此我们之前进行浏览器检查:


final com.vaadin.server.WebBrowser webBrowser = Page.getCurrent().getWebBrowser();
if (webBrowser.isChrome() || webBrowser.isOpera()) {
    javascript.execute("window.onunload = function (e) { var e = e || window.event; closeMyApplication(); return; };");
} else {
    javascript.execute("window.onbeforeunload = function (e) { var e = e || window.event; closeMyApplication(); return; };");
}

答案 2 :(得分:0)

在Vaadin中,Application.close()是在关闭应用程序会话时调用的方法。请记住,它绑定到会话,而不是整个应用程序。