2011-08-12 30 views
3

我试图在用户尝试从页面导航时显示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)

非常感谢

回答

0

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

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> 
+0

谢谢罗伯特!想象一下,我在一个页面中有30到40个链接。每个人都走向不同的方向。我正在寻找可用于任何这些链接的解决方案。就像当页面卸载时,我想触发对话框,并保持页面等待用户的响应。谢谢。 – ZakiMak

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

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

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

+0

我正在寻找一种方式来显示Primefaces确认对话框,而不是通常的。 – ZakiMak

+0

但我认为Primefaces确认对话框不会帮助您,以防用户通过关闭浏览器导航。 – zixtor

相关问题