gpt4 book ai didi

java - 当表单被 JavaScript 禁用时,JSF 表单不会被提交

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:35:39 25 4
gpt4 key购买 nike

这是提交按钮:

<h:commandButton 
actionListener="#{regBean.findReg}"
action="#{regBean.navigate}" value="Search" />

这是表格:

<h:form onsubmit="this.disabled=true;busyProcess();return true;">

如果按下提交按钮,页面会显示一个“忙碌”图标,直到请求被处理。问题是,表单永远不会提交,请求也永远不会到达后端。但是,如果我改为像这样取出“禁用”调用:

<h:form onsubmit="busyProcess();return true;">

然后一切正常。有什么想法吗?

最佳答案

JSF 依靠提交按钮的名称-值对的存在来调用服务器端的特定操作。如果您在提交表单之前禁用表单(至少禁用按钮),则请求参数映射中将没有可用信息,并且 JSF 将不会调用任何操作。

最好的办法是引入超时,在提交后大约 50 毫秒禁用按钮。例如

onsubmit="setTimeout(function(){document.getElementById('formId:buttonId').disabled=true;},50);busyProcess();"

最后的显式 return true; 是多余的。此外,直接禁用 HTML 表单元素是行不通的,因为它没有 disabled 属性,您希望禁用该按钮(如果需要,还可以禁用其他输入元素)。

这里有一些改进:

<h:form onsubmit="busyProcess(this);">

function busyProcess(form) {
setTimeout(function() {
for (var i = 0; i < form.elements.length; i++) {
form.elements[i].disabled = true;
}
}, 50);

// Remnant of your code here.
}

更新:因为我想知道你告诉它“有效”,我在各种浏览器中测试了表单的 disabled 属性,它只在 MSIE 中有效(令人惊讶.. ),但在其他(真正的)浏览器中没有。您不想依赖于浏览器,所以忘记它并继续禁用表单的各个元素。

关于java - 当表单被 JavaScript 禁用时,JSF 表单不会被提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2852467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com