2017-07-28 81 views
-2

我的工作primefaces應用,顯示髒區(自定義警告消息)在JSF的對話框/ Primefaces

如果有些東西在頁面改變,點擊另一個頁面,不保存,我需要顯示彈出對話框說即,嘿,你改變了你要保存與否的東西,基於用戶選擇它應該做的要麼保存/取消/無功能。

我見過的鏈接, to track the changes in JSF

如果是在同一個bean類並點擊取消按鈕,我可以寫一些功能,並顯示該對話框。

但是,如果用戶點擊鏈接的其它/頁或菜單項如何處理這種情況的。

反正是有像,順其自然以其它bean的最後一個方法應該叫之前。

正如我找遍因爲安全瀏覽器沒有顯示自定義警告消息。

@PreDestroy 
public void destroy() { ..} 

我試過這個,但是如果我每次點擊其他鏈接都沒有正確調用這個方法。有沒有其他方法?

回答

1

捕捉應用程序的變化,你可能需要引入骯髒的標誌,如果任何組件價值得到改變,那麼應用程序應該設置髒標誌值設置爲true。就像下面的例子。

<h:inputText id="someId" onchange="setDirty();" 
    value="#{myManager.name}" maxlength="100"> 

用戶嘗試瀏覽下一頁面,而不保存,然後WindowBeforeUnloadListener將首先觸發,只是檢查布爾變量,如果值爲true,表明驗證彈出。

var dirty = true; 
window.onunload = windowUnloadListener; 
window.onbeforeunload = windowBeforeUnloadListener; 
window.onload = windowLoadListener; 

/* 
* Listener for Window-Onbeforeunload event. 
* Called before unloading (leaving the current page) the window. 
* This function checks for the dirty flag and pops up the 
* message to confirm wit the user. 
*/ 
function windowBeforeUnloadListener() { 
    if(dirty) { 
     return "You have used navigation controls that are not part of the page.\n\n 
     If you wish to end, click 'Leave this page'. " 
     + "Your session will end here.\n\n" 
     + "If you wish to continue to use then please click 'Stay on this page'."; 
    } 
} 

在頁面加載並保存時,將髒標誌值設置爲false。

/* 
* Listener for Window-Onload event. 
* Called every time a new page is loaded. 
* This function will reset the flag. 
*/ 
function windowLoadListener(){ 
    dirty= true; 
} 

注意:自定義驗證消息在IE中不起作用。它顯示默認的瀏覽器驗證消息。