我有一个包含不同可用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
但是没有实现。
答案 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就会触发onbeforeunload,但不会触发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()是在关闭应用程序会话时调用的方法。请记住,它绑定到会话,而不是整个应用程序。