我想在JSF2.0中關閉窗口期間使會話無效。所以我寫了下面的代碼來做到這一點:使JSF2.0無效會話Mojarra和JQuery
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'
});
}
而我的servlet如下:
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
servlet正在調用,但FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
正在拋出NullPointerException
。爲什麼會發生?在我的servlet的AJAX調用期間,我看不到FacesContext
?如果以上是不可能的,可以建議其他方法嗎?
是的。感謝您的回答。 – MyFist
謝謝。它工作正常。 – MyFist
不客氣。 – BalusC