jsf - 禁用的 JSF 命令按钮在通过 JavaScript 重新启用后不会触发

标签 jsf primefaces

如果我启动一个已禁用的命令按钮,即使重新启用该按钮后它也不会触发。

<p:commandButton id="btnAJAX" value="AJAX" widgetVar="btnAJAX" disabled="true" action="#{bean.neverReached()}"/>
<p:commandButton id="btnEnabler" value="Enable" oncomplete="btnAJAX.enable()"/>

此处发现了类似问题:http://forum.primefaces.org/viewtopic.php?f=3&t=7817

我正在使用 primefaces 3.0.1 和 JDK 1.7

有什么解决办法吗?

最佳答案

您需要通过 JSF 启用该按钮,而不是通过 JavaScript/HTML DOM。在处理表单提交期间,JSF 还将在服务器端 View 状态中验证该按钮是否启用,作为防止篡改请求的一部分。

例如

<p:commandButton id="btnAJAX" value="AJAX" action="#{bean.someAction}" disabled="#{!bean.enabled}" />
<p:commandButton id="btnEnabler" value="Enable" action="#{bean.enableButton}" process="@this" update="btnAJAX" />

private boolean enabled;

public void enableButton() {
    enabled = true;
}

public boolean isEnabled() {
    return enabled;
}

确保bean至少是@ViewScoped而不是@RequestScoped,否则按钮的操作仍然会失败,因为在表单提交请求期间重新创建了bean因此 enabled 属性将成为默认值,即 false

另请参阅:

关于jsf - 禁用的 JSF 命令按钮在通过 JavaScript 重新启用后不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9000669/

相关文章:

java - 使用Java提交表单

ajax - JSF AJAX 验证 : execute ="@this" render ="@form" inconsistent depending on prior requests

css - 如何在 JSF、primefaces 中使用 CSS 将列的内容设置为顶部而不是居中?

javascript - 启用/禁用表单元素并一次更改按钮的值?

jsf - 如果将相同的支持 bean 属性绑定(bind)到同一表单中的两个输入字段,那么 JSF 的行为是什么?

java - JSF 表单中可选的日历类型字段

Primefaces Datatable 有动态 p :column

java - 在 Primefaces 上注销前咆哮

jsf-2 - 是否可以在一个 Web 应用程序中组合 Primefaces 和 Richfaces?

java - 仅在显示时执行复合组件代码