Jsf <;p:commandButton>;禁用时不工作=";“真的”;最初

Jsf <;p:commandButton>;禁用时不工作=";“真的”;最初,jsf,button,primefaces,Jsf,Button,Primefaces,这是我的ManagedBean: @Named(value = "mrBean") @RequestScoped public class MrBean { public void laugh() { System.out.println("HAHAHA"); } public void prepareToLaugh() { System.out.println("Drink water."); } } 这是我的commandButton的

这是我的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();"  />
单击第二个按钮时,我看到
饮水
,第一个按钮已启用。然而,当我点击第一个按钮时,什么也没发生


如果有人能给我一个如何解决这个问题的建议,我将不胜感激。我使用的是PrimeFaces 3.0 RC2。

rendered
属性一样,JSF在处理表单提交时重新评估服务器端的
disabled
属性,作为防止篡改请求等的一部分。但是,您正在通过JS启用/禁用它,而不通知服务器端更改

在处理表单提交期间,您需要确保在请求期间,
disabled
属性的值计算为
false
。例如,将其绑定到另一个按钮设置的视图范围bean的
boolean
属性


另见:

@JigarJoshi:我不知道你说的“直接启用”是什么意思。简言之,如果我最初没有将
disabled
设置为true,它就会工作。如果我这样做了,它就不起作用了我一直用这种方式。然而,我在前面看到了PrimeFaces的客户端API,我认为我可以保存一个布尔属性。结果还是需要的:P.谢谢!API更像按钮的可视助手。
<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();" />