谁能解释以下行为?在 JavaScript 中禁用命令按钮时,永远不会执行 action 方法。
<h:form>
<h:commandButton value="test" action="#{bean.test}" onclick="disabled=true" />
</h:form>
谁能解释以下行为?在 JavaScript 中禁用命令按钮时,永远不会执行 action 方法。
<h:form>
<h:commandButton value="test" action="#{bean.test}" onclick="disabled=true" />
</h:form>
当 HTML 表单元素被禁用时,它的name=value
对将不会作为 HTTP 请求参数发送,因此 JSF 永远不会在请求参数映射中找到它。对于命令按钮,这反过来意味着永远不会调用该操作。
您需要在提交表单后不久禁用该按钮。使用属性的建议disabled
没有任何意义,因为为时已晚。提交表单时不设置,仅在响应返回时设置。
为了在这种特殊情况下实现您的特定功能要求,您可以使用 JS 来使禁用超时。
<h:commandButton ... onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);" />
然而,更好的是使用<f:ajax onevent>
尝试使用组件的“已禁用”属性从 BackBean 禁用按钮
disabled="#{!(bean.disable)}"
此选项将在渲染组件时起作用,在发送信息之后