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

5
我正在尝试在用户试图离开页面时显示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个回答

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>

谢谢Robert!假设我在页面上有30到40个链接,每个链接都指向不同的方向。我正在寻找一种适用于任何这些链接的解决方案。就像当页面卸载时,我想触发对话框并使页面等待用户的响应一样。谢谢。 - ZakiMak

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

你从处理程序函数返回的值将显示在弹出对话框中。因此,您可以告诉用户有一些未保存的数据,他可能想要保存它,然后您可以让用户决定是要离开还是留下并手动保存。

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


我正在寻找一种方法来显示Primefaces确认对话框,而不是通常的对话框。 - ZakiMak
但是我认为Primefaces确认对话框在用户通过关闭浏览器导航离开的情况下不会有帮助。 - zixtor

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接