我想在用户单击链接离开当前页面而不保存之前,警告用户表单中任何未保存的数据。在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>