0

我有一个包含不同可用 portlet 的门户。我的ActivityPortlet有一些背景线程,当Portlet被卸载时必须停止(例如,选择另一个Portlet时)。Activity portlet 属于 class GenericPortletApplication,它实现了以下接口:

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

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

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

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

4

3 回答 3

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; };");
于 2013-11-13T14:34:00.583 回答
1

请注意,Google Chrome 和 Opera 会触发 onbeforeunload,但不会在按下 mailto 链接时触发 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; };");
}
于 2015-04-02T14:08:17.680 回答
0

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

于 2012-05-24T09:26:50.060 回答