Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 重新启用p:commandButton不触发ajax_Jsf_Primefaces - Fatal编程技术网

Jsf 重新启用p:commandButton不触发ajax

Jsf 重新启用p:commandButton不触发ajax,jsf,primefaces,Jsf,Primefaces,如果我启动一个commandButton disabled,AJAX事件即使在重新启用按钮后也不会触发 <p:commandButton id="btnAJAX" value="AJAX" widgetVar="btnAJAX" disabled="true" action="#{bean.neverReached()}"/> <p:commandButton id="btnEnabler" value="Enable" oncomplete="btnAJAX.enable()

如果我启动一个commandButton disabled,AJAX事件即使在重新启用按钮后也不会触发

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

此处识别的类似问题:

我使用的是PrimeFaces3.0.1和JDK1.7


有什么解决方案吗?

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

例如

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

另见:

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

例如

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

另见:
<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;
}