【问题标题】:How to display a Primefaces confirm dialog when navigating to another page?导航到另一个页面时如何显示 Primefaces 确认对话框?
【发布时间】:2011-08-12 04:18:40
【问题描述】:

当用户试图离开页面时,我试图显示 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)

非常感谢

【问题讨论】:

    标签: javascript 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>
    

    【讨论】:

    • 谢谢罗伯特!想象一下,我在一个页面中有 30 到 40 个链接。各自走向不同的方向。我正在寻找一种适用于任何这些链接的解决方案。当页面卸载时,我想触发对话框并让页面等待用户的响应。谢谢。
    【解决方案2】:
    window.onbeforeunload = function() {
        return 'There are unsaved changes!';
    }
    

    从处理函数返回的值显示在弹出对话框中。所以你可以告诉用户有一些未保存的数据,他可能想要保存它,然后你可以把它留给用户是想离开还是留下来手动保存。

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

    【讨论】:

    • 我正在寻找一种显示 Primefaces 确认对话框的方法,而不是通常的方法。
    • 但我认为 Primefaces 确认对话框不会帮助您,以防用户通过关闭浏览器导航离开。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2011-08-15
      • 2012-06-22
      • 2021-07-08
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多