我正在困难地重现我的jsf应用程序的错误(使用Primefaces 2.1,SSL的Glassfish 3.0.1上的Mojarra 2.1)。我怀疑它可能与同一表格的双重或多次提交有关,例如当用户双击提交按钮时。
此错误的症状是服务器中断资源文件(javascript,css)的传输,然后页面看起来很奇怪(缺少css)或者不能按预期工作(缺少js)。
我不确定这是唯一的原因。这很难弄清楚,因为偶尔会发生错误。
有没有办法阻止多次提交相同的表单?一个JavaScript解决方案会做到这一点。但也许有一个服务器端解决方案,可能是一个特定的jsf配置?
答案 0 :(得分:2)
在这种特殊情况下,我希望在服务器端解决方案上使用JavaScript解决方案。服务器端解决方案只会阻止业务逻辑执行两次。它不会阻止HTTP请求被发送两次,也不会阻止资源请求被中止。我认为这不会改变第二次提交的特定问题,因为资源已经破缺。
您可以使用jsf.ajax.addOnEvent
函数对ajax请求进行全局挂钩。这是一个启动示例:
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;
}
});