这是我的ManagedBean:

@Named(value = "mrBean")
@RequestScoped
public class MrBean {

   public void laugh() {
      System.out.println("HAHAHA");
   }

   public void prepareToLaugh() {
      System.out.println("Drink water.");
   }

}


这是我的commandButton的工作版本:

<p:commandButton actionListener="#{mrBean.laugh}" widgetVar="laughtButton"
                 value="Laugh" oncomplete="laughButton.disable();"  />


单击上面的按钮时,看到HAHAHA并且该按钮被禁用。但是,当我将aughlButton的disable属性设置为true时,该按钮不再起作用:

<p:commandButton actionListener="#{mrBean.laugh}" widgetVar="laughtButton"
                 value="Laugh" disabled="true" oncomplete="laughButton.disable();"  />

<p:commandButton actionListener="#{mrBean.prepareToLaugh}"
                 value="Prepare to laugh" oncomplete="laughButton.enable();" />


当我单击第二个按钮时,看到Drink water并且第一个按钮已启用。但是,当我单击第一个按钮时,什么也没有发生。

如果有人能给我有关如何解决此问题的建议,我将不胜感激。我正在使用PrimeFaces 3.0 RC2。

最佳答案

rendered属性一样,JSF在处理表单提交过程中在服务器端重新评估disabled属性,作为防止篡改请求之类的保护措施。但是,您可以通过JS启用/禁用它,而无需将更改通知服务器端。

每当您希望在处理表单提交过程中启用按钮时,都需要确保在请求期间disabled属性的值评估为false。例如,将其绑定到由另一个按钮设置的视图作用域bean的boolean属性。

<h:commandButton disabled="#{bean.laughDisabled}" />


也可以看看:


commandButton/commandLink/ajax action/listener method not invoked or input value not updated

关于jsf - <p:commandButton>最初在disable =“true”时不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8647315/

10-09 00:15