JSF2.0でウィンドウクローズ時にセッションを無効化したい。だから私はそれを行うために以下のコードを書きました:
var preventUnloadPrompt;
var messageBeforeUnload = "my message here - Are you sure you want to leave this page?";
$('a').live('click', function() {
preventUnloadPrompt = true;
});
$('form').live('submit', function() {
preventUnloadPrompt = true;
});
$(window).bind("beforeunload", function(e) {
var rval;
if (preventUnloadPrompt) {
return;
} else {
// return messageBeforeUnload;
doInvalidate();
}
return rval;
});
function doInvalidate()
{
$.ajax({
url: "http://localhost:8080/MyPrj/SessionTimeout",
type: 'GET'
});
}
そして私のサーブレットは以下の通りです:
public class SessionTimeout extends HttpServlet {
.....
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.err.println("IN SESSION TIMEOUT GET!!!");
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
}
.....
}
最初の JSF2.0 ページを起動した後 (この時点で FacesContext が初期化されている必要があります)、ウィンドウを閉じようとしました。SessionTimeout
サーブレットが呼び出されているのがわかりますが、FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
スローしていNullPointerException
ます。なぜそれが起こっているのですか?FacesContext
サーブレットでこの AJAX 呼び出し中に見えませんか? 上記が不可能な場合、他のアプローチを提案できますか?