我想在用户点击链接导航离开当前页面之前警告用户表单中未保存的数据,而不保存。 在JSF中实现此目的的更好方法是什么,以便在所有页面的单个位置完成此检查。 任何建议都表示赞赏。
答案 0 :(得分:10)
标准的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
属性所包含的文件)和无论您有哪个页面,它都能正常工作。
答案 1 :(得分:0)
您可以做的是为所有链接添加一个onclick。使用jQuery,您可以执行以下操作:
$($('a').click(function(){
if(unsavedWork){
return confirm("You have not saved your work, would you like to leave anyway?");
}else{
return true;
}
}););
答案 2 :(得分:0)
如果您使用的是JSF模板,并且希望在特定页面上显示消息,而不是在离开每页时都可以这样做:
1)为模板中的body元素设置ID:
<h:body id="mainBody">
</h:body>
2)在特定窗口中使用这样的ID或查看,在留下消息之前将其打开:
<script>
document.getElementById("mainBody").onbeforeunload = function (e) {
return true;
};
</script>