Jsf 2 避免多次提交表格
在JSF2中,有没有办法处理多表单提交(用户多次单击提交按钮)?现在我们在服务器中得到以下异常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 这取决于您提
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();
});