我想知道,在用戶關閉JSF 1.2上的窗口(點擊瀏覽器的「X」)後,如何在JSF中執行session.remove("userBean")
。JSF:清除會話作用域Bean
我正在考慮在用戶點擊瀏覽器的'X'後彈出一個確認消息,但不太確定如何訪問或綁定到我定義的方法的按鈕,其中我有該邏輯來清除範圍的bean。或者有沒有更好的方法來做到這一點?
任何幫助將不勝感激。
謝謝。
我想知道,在用戶關閉JSF 1.2上的窗口(點擊瀏覽器的「X」)後,如何在JSF中執行session.remove("userBean")
。JSF:清除會話作用域Bean
我正在考慮在用戶點擊瀏覽器的'X'後彈出一個確認消息,但不太確定如何訪問或綁定到我定義的方法的按鈕,其中我有該邏輯來清除範圍的bean。或者有沒有更好的方法來做到這一點?
任何幫助將不勝感激。
謝謝。
我在想,如何在JSF 1.2中關閉窗口(點擊瀏覽器的'X')後在JSF中執行session.remove(「userBean」)。
你不需要擔心它。如果會話超時,那麼這個bean肯定會被刪除。如有必要,您可以在<session-config>
的web.xml
中控制會話超時期限。如果你真的想要掛斷會話超時/銷燬,那麼你可以實現HttpSessionListener
和截獲sessionDestroyed()
,或者讓UserBean
實現HttpSessionBindingListener
並截取valueUnbound()
。
如果你真的堅持在瀏覽器上關閉按鈕,這畢竟是比較多的工作,那麼你所能做的就是使用Javascript的beforeunload
事件。沒有其他方法。你應該記住,這是一個不規範的事件,因此並不是所有的瀏覽器都支持它。例如。 Opera不支持這個事件。這是精簡的工作,因爲當你做一個普通的香草導航或表單提交時,這個事件也會被觸發,你需要在每個「普通」鏈接/按鈕上禁止這個事件。您還需要觸發Ajaxical請求以通知服務器關閉,因爲您將無法更改頁面位置或在瀏覽器關閉時再提交隱藏表單。
爲什麼你想刪除一個屬性。事實上,當會話失效時,無論如何都會收集垃圾,因爲沒有參考。在這種情況下,您可能希望使用較低的超時時間。
如果您想立即使會話無效。只要點擊「確定」按鈕,您就可以使用JavaScript功能將請求發佈到您的服務器。這可能不是一件非常可靠的事情,但作爲一個設施不會受到傷害。下面是一個示例代碼,
JavaScript函數
function show_confirm()
{
var r=confirm("Are you sure you want to abort the session?");
if (r==true) {
// set an appropriate form action and
document.form.submit();
}
}
HTML
<input type="button" onclick="show_confirm()" value="Show confirm box" />
[您的意見後編輯]
所以,你要綁定的按鈕到你的bean方法,你必須d自定義的東西,使用CSS和JavaScript。看看this tutorial,它會爲您提供一些有關如何創建自定義彈出窗口的信息。由於它只是一個普通的<div>
,你可以像其他任何按鈕一樣操作,不需要火箭科學,只需將你的按鈕代碼放入<div>
即可。
如何使用JavaScript函數將請求發佈到我的服務器,點擊「確定」按鈕。作爲新手,你能舉一些例子嗎? 謝謝, – user234194 2010-01-18 04:46:39
我的意思是你可以使用確認框。看我的附錄。 – 2010-01-18 05:22:36
但我不能將OK按鈕綁定到我的方法從bean類,我的意思是不是javaScript method.Kindly建議。 – user234194 2010-01-18 06:40:28
您可以使用MyFaces Orchestra在自定義conversation.access
和conversation.manual
中定義您的bean。他們將允許你的豆子比在會話中存放的時間更近。
conversation.access
,那麼當bean不再被用戶請求引用時(即對話結束),它們將立即被刪除。這不適用於你的情況(關閉瀏覽器),但仍然很有用。對話是由屬於相同邏輯上下文的用戶執行的步驟序列 - 即整個註冊過程是一個對話,但它跨越多個頁面。
通常,用戶關閉後,您不必擔心會話中剩餘的內容。它最終會被超時並收集垃圾。在瀏覽時你必須擔心會話中的內容,因爲它會變得非常大。
在JSF中,你將作出類似
JSF頁面:
<h:commandButton id="closeBtn"
type="submit" value="Close" onclick="return showConfirmClose();"
actionListener="#{backBean.cleanUpMethod}"
</h:commandButton>
的Javascript:
//in case the user clicked No, this method should return false,
//preventing the action from being submitted, but double check all the return values first
function showConfirmClose(){
var c = confirm("Are you sure?");
return c;
}
BackBean:
public void cleanUpMethod(ActionEvent event){
//do cleaning here
}
查看我的附錄。 – 2010-01-18 05:27:42