Jsf 2 避免多次提交表格

Jsf 2 避免多次提交表格,jsf-2,Jsf 2,在JSF2中,有没有办法处理多表单提交(用户多次单击提交按钮)?现在我们在服务器中得到以下异常 java.lang.IllegalStateException: Response already committed java.lang.IllegalStateException: Response already committed javax.faces.FacesException: socket write error: Connection aborted by peer 这取决于您提

在JSF2中,有没有办法处理多表单提交(用户多次单击提交按钮)?现在我们在服务器中得到以下异常

java.lang.IllegalStateException: Response already committed
java.lang.IllegalStateException: Response already committed
javax.faces.FacesException: socket write error: Connection aborted by peer

这取决于您提交表单的方式。如果您使用
或任何其他基于Ajax的标记来执行Ajax提交,那么最好使用
jsf.Ajax.addOnEvent()
添加一个函数,该函数在Ajax请求即将发送时禁用按钮,并在检索Ajax响应后重新启用按钮

例如,如下所示,在包含JSF Ajax脚本之后包括,例如,在
中引用
.js
文件

如果您没有使用Ajax执行提交,那么其中一种方法是在
onclick
中加入
setTimeout()
函数,该函数在单击几毫秒后禁用按钮

基本上

<h:commandButton 
    id="foo"
    value="submit"
    action="#{bean.submit}"
    onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);"
/>


setTimeout()
是必需的,因为当您立即禁用它时,按钮的
name=value
对将不会与请求一起发送,这将导致JSF无法识别要执行的
操作。当然,您可以将其重构为一些DOM就绪或窗口加载函数,将其应用于所有提交按钮(jQuery在这方面非常有用)。

您可以在页面上添加一个禁用的按钮,该按钮不起任何作用,并在单击提交按钮时显示它

<div id="disabled" style="display:none;">
     <span class="disabled-button"/>
</div>
<div id="enabled" style="display:block;">
     <span class="enabled-button">
          <h:commandLink id="submit"/>
     </span>
</div>


$('#submit').live("click", function() {
$('#enabled').hide();
$('#disabled').show();
});

$(“#提交”).live(“单击”,函数(){
$(“#已启用”).hide();
$(“#已禁用”).show();
});

java.net.SocketException:socket写入错误:连接被peerDo中止。请向您提供一些指针或链接,以使其成为DOM就绪或窗口onload函数。很抱歉,在DOM就绪或窗口onload过程中不需要执行。只需将其未经修改地放在
中即可。谢谢你的帮助……我们可以找到使用该样式的提交按钮。没有更标准的方法吗?也许在服务器端用p:commandButton做这个?
<div id="disabled" style="display:none;">
     <span class="disabled-button"/>
</div>
<div id="enabled" style="display:block;">
     <span class="enabled-button">
          <h:commandLink id="submit"/>
     </span>
</div>


$('#submit').live("click", function() {
$('#enabled').hide();
$('#disabled').show();
});