1

谁能解释以下行为?在 JavaScript 中禁用命令按钮时,永远不会执行 action 方法。

<h:form>
    <h:commandButton value="test" action="#{bean.test}" onclick="disabled=true" />
</h:form>
4

2 回答 2

2

当 HTML 表单元素被禁用时,它的name=value对将不会作为 HTTP 请求参数发送,因此 JSF 永远不会在请求参数映射中找到它。对于命令按钮,这反过来意味着永远不会调用该操作。

您需要在提交表单后不久禁用该按钮。使用属性的建议disabled没有任何意义,因为为时已晚。提交表单时不设置,仅在响应返回时设置。

为了在这种特殊情况下实现您的特定功能要求,您可以使用 JS 来使禁用超时。

<h:commandButton ... onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);" />

然而,更好的是使用<f:ajax onevent>

也可以看看:

于 2012-10-05T13:25:31.067 回答
-1

尝试使用组件的“已禁用”属性从 BackBean 禁用按钮

disabled="#{!(bean.disable)}"

此选项将在渲染组件时起作用,在发送信息之后

于 2012-10-05T12:26:29.030 回答