警告用户JSF中未保存的数据



我想在用户单击链接离开当前页面而不保存之前,警告用户表单中任何未保存的数据。在JSF中实现这一点的更好方法是什么,以便在一个地方对所有页面进行检查。欢迎提出任何建议。

标准JSF实现没有提供开箱即用的功能。此外,这更多的是客户端的问题,而不是服务器端的问题,因此您确实需要为此获取客户端语言,例如JavaScript。由于为这个特定的功能需求编写与跨浏览器兼容的JavaScript代码并非易事,因此您希望使用一个考虑到这一点的JavaScript库,如jQuery。

下面是一个完整的启动示例,说明如何在jQuery的帮助下实现这一点。

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(document).ready(function() {
        // Set the unload message whenever any input element get changed.
        $(':input').change(function() {
            setConfirmUnload(true);
        });
        // Turn off the unload message whenever a form get submitted properly.
        $('form').submit(function() {
            setConfirmUnload(false);
        });
    });
    function setConfirmUnload(on) {
        var message = "You have unsaved data. Are you sure to leave the page?";
        window.onbeforeunload = (on) ? function() { return message; } : null;
    }
</script>

只需将其粘贴到您的<head>模板中(最好还将原始<script>代码重构到其自己的.js文件中,您可以通过src属性将其包含在内(,无论您有哪个页面,它都可以工作。

您可以做的是向所有链接添加onclick。使用jQuery,您可以执行以下操作:

$($('a').click(function(){
    if(unsavedWork){
        return confirm("You have not saved your work, would you like to leave anyway?");
    }else{
        return true;
    }
}););

如果您正在使用JSF模板,并且您希望消息出现在特定的页面上,而不是在离开每个页面时您可以执行:

1(为模板中的body元素设置一个id:

    <h:body id="mainBody">
    </h:body>

2(在留言前在特定窗口或视图中使用这样的id:

    <script>
        document.getElementById("mainBody").onbeforeunload = function (e) {
            return true;
        };
    </script>

最新更新