JSFでページを離れるときにメソッドを呼び出す方法はありますか?
4 に答える
ネイティブJSFまたはPrimeFacesを使用している場合は除きます。代わりに、セッションの有効期限をフックするのが最善の策です。
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
@Named
@SessionScoped
public class Bean implements Serializable {
@PreDestroy
public void destroy() {
// Your code here.
}
}
JSFユーティリティライブラリOmniFacesを使用する場合は、そのを使用できます@ViewScoped
。@PreDestroy
これは、ビュースコープのBeanを参照してページを離れるときにを呼び出します。
import javax.inject.Named;
import org.omnifaces.cdi.ViewScoped;
@Named
@ViewScoped
public class Bean implements Serializable {
@PreDestroy
public void destroy() {
// Your code here.
}
}
裏では、同期XHRへのフォールバックを使用しnavigator.sendBeacon()
てウィンドウイベント中にをトリガーすることで機能します(これは、をサポートする最新のブラウザーでは非推奨です)。beforeunload
navigator.sendBeacon()
参照:
バッキングBeanでomnifaces@ViewScopedアノテーションを使用すると、ビューを離れるとBeanオブジェクトが破棄されます。そのため、@ PreDestroyアノテーションを使用して、これが発生したときに関数を呼び出すことができます。
注:omnifaces@ViewScopedアノテーションを使用する必要があります。標準のJSF@ViewScopedアノテーションを使用すると、ビューを離れただけではオブジェクトが破棄されないため、インポートに注意してください。
あなたの問題解決策:-それはJavaスクリプトで動作します
<head>
<title>onunload test</title>
<script type="text/javascript">
window.onunload = unloadPage;
function unloadPage()
{
alert("unload event detected!");
}
</script>
</head>
また、詳細についてはいくつかのリンク:- リンク
以下のように、ページを閉じたり、別のページに移動したりするときに、を使用してページ本体の「 onunload」イベントで<a4j:jsFunction/>
呼び出すことにより、JSFマネージドBeanメソッドを呼び出すことができます。
<body onunload="leavingPage()">
<a4j:jsFunction name="leavingPage" action="#{myBean.myMethod}"/>