0

利用可能なさまざまなポートレットを備えたポータルがあります。私のActivityポートレットにはいくつかのバックグラウンドスレッドがあり、ポートレットがアンロードされたとき(たとえば、別のポートレットを選択したとき)に停止する必要があります。アクティビティポートレットはクラス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 に答える