JSF双重提交表单数据

时间:2011-11-14 19:42:21

标签: jsf-2 glassfish primefaces

我正在困难地重现我的jsf应用程序的错误(使用Primefaces 2.1,SSL的Glassfish 3.0.1上的Mojarra 2.1)。我怀疑它可能与同一表格的双重或多次提交有关,例如当用户双击提交按钮时。

此错误的症状是服务器中断资源文件(javascript,css)的传输,然后页面看起来很奇怪(缺少css)或者不能按预期工作(缺少js)。

我不确定这是唯一的原因。这很难弄清楚,因为偶尔会发生错误。

有没有办法阻止多次提交相同的表单?一个JavaScript解决方案会做到这一点。但也许有一个服务器端解决方案,可能是一个特定的jsf配置?

1 个答案:

答案 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;
    }    
});