我一直困扰着我的 jsf 应用程序(Mojarra 2.1 on Glassfish 3.0.1 with Primefaces 2.1, SSL)的一个难以重现的错误。我怀疑它可能与重复或多次提交同一表格有关,例如当用户双击提交按钮时。
此错误的症状是服务器中断资源文件(javascript、css)的传输,然后页面看起来很奇怪(缺少 css)或无法按预期工作(缺少 js)。
我不确定这是唯一的原因。这很难弄清楚,因为错误偶尔会发生。
有没有办法防止多次提交同一个表单?一个 javascript 解决方案就可以做到。但也许有一个服务器端解决方案,也许是一个特定的 jsf 配置?
最佳答案
在这种特殊情况下,我更喜欢 JavaScript 解决方案而不是服务器端解决方案。服务器端解决方案只会阻止业务逻辑被执行两次。它不会阻止 HTTP 请求被发送两次,也不会阻止资源请求被中止。我认为这不会改变第二次提交时资源损坏的特定问题。
您可以使用 jsf.ajax.addOnEvent
函数对 ajax 请求进行全局 Hook 。这是一个启动示例:
jsf.ajax.addOnEvent(function(data) {
if (data.source.type != "submit") {
return;
}
switch (data.status) {
case "begin":
data.source.disabled = true;
break;
case "complete":
data.source.disabled = false;
break;
}
});
关于jsf-2 - JSF双重提交表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8127109/