导航到另一个页面时如何显示Primefaces确认对话框?

时间:2011-08-12 04:18:41

标签: javascript primefaces

当用户尝试离开页面时,我正在尝试显示Primefaces确认对话框。当前页面可能包含一些未保存的数据,因此会在离开页面之前询问用户是否要保存这些数据。

目前,我可以在用户点击页面时显示确认对话框,如下所示:

function onBeforeUnload_Handler(){
 confirmation.show(); // confirmation is the "widgetVar" value of p:confirmDialog
} 

window.onbeforeunload = onBeforeUnload_Handler;

但问题是,在显示对话框时,它会导航到其他页面而无需等待用户的响应。我希望当前页面等待用户响应并执行“保存”或“不保存”之类的操作,然后导航。

我尝试在“confirmation.show()”之后添加“return false”,但这会导致弹出浏览器警告框。

(Primefaces 3.0.M1)

非常感谢

3 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

<p:commandButton value="Next Page" onclick="confirmation.show();" />

<p:confirmDialog .....message="Are you sure?">
<p:commandButton value="Yes" action="nextpage?faces-redirect=true" />
<p:commandButton value="No" onclick="confirmation.hide();" />
</p:confirmDialog>

答案 1 :(得分:1)

window.onbeforeunload = function() {
    return 'There are unsaved changes!';
}

从处理函数返回的值将显示在弹出对话框中。因此,您可以告诉用户有一些未保存的数据,并且他可能希望保存它,然后您可以将其留给用户,无论他是想要离开还是保留并手动保存。

或者,您可以在'onbeforeunload'处理程序中使用“同步”AJAX请求来更新对服务器的更改。它将停止浏览器,直到请求完成。它适用于IE,FF,Chrome,但不适用于Opera。

答案 2 :(得分:0)

这是为了让其他人知道我最终做了什么。我找不到任何方法来完成我使用的Primefaces版本。因此最终使用默认浏览器警告框通知用户并采取所需步骤。