【问题标题】:<p:commandButton> not working when disable="true" initially<p:commandButton> 最初在 disable="true" 时不起作用
【发布时间】:2011-12-27 17:16:16
【问题描述】:

这是我的 ManagedBean:

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

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

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

}

这是我的命令按钮的工作版本:

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

当我点击上面的按钮时,我看到HAHAHA 并且该按钮被禁用。但是,当我将laughButton 的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。

【问题讨论】:

  • @JigarJoshi:我不确定您所说的“直接启用”是什么意思。简而言之,如果我最初没有将 disabled 设置为 true,它会起作用。如果我这样做,它不起作用。 =)

标签: jsf button primefaces


【解决方案1】:

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

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

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

另见:

【讨论】:

  • 我一直都是这样用的。但是,我之前看到了 PrimeFaces 的客户端 API,我认为我可以保存一个布尔属性。原来它仍然需要:P。谢谢!
  • API 更像是按钮的可视化助手。
猜你喜欢
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2015-07-15
  • 2013-09-28
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多