【问题标题】:incompatible p:commandButton with updating values in xhtml file不兼容的 p:commandButton 与更新 xhtml 文件中的值
【发布时间】:2013-05-29 02:16:19
【问题描述】:

今天我花了一整天的时间试图理解为什么在从 <p:commandButton> 调用 bean 后 xhtml 文件中的值没有更新。

在我将 p:commandButton 更改为 h:commandButton 后,一切正常。这就是我声明命令按钮的方式:

<p:commandButton id="b1" style="height: 30px; width: 30px;" value="a"
    action="#{turnoController.createTurno('a')}"
    onclick="document.getElementById(this.id).disabled=true;"/>

使用此命令按钮会刷新,但我不知道如何禁用它。

<h:commandButton id="b1" style="height: 30px; width: 30px;" value="a"
    action="#{turnoController.createTurno('a')}"/>

我想问为什么p:commandButton和“刷新”页面的值不兼容???

我想要做的是在点击后禁用按钮,同时更新所有值...

如何在xhtml+jsf中制作???

【问题讨论】:

  • 尝试使用update="@form"oncomplete="document.getElementById(this.id).disabled=false;"
  • oncomplete... 不起作用
  • 天哪!我注意到它是
  • 我已经在你很久以前的问题中发布了一个答案,也解决了这个问题。

标签: jsf primefaces commandbutton


【解决方案1】:

onclick 与页面的刷新值不兼容。更新失败的原因是您的onclick 函数可能在请求进入APPLY_REQUEST_VALUES 阶段之前最终设置了&lt;p:commandButton disabled="true"/&gt;。这是 JSF 生命周期中的阶段,组件属性被评估并存储为组件的个人属性映射的一部分

具有disabled="true" 的属性将在处理期间被 JSF 忽略,这就是您正在观察的结果。 onclick 禁用该按钮还为时过早。

使用 ajax 更新按钮的 disabled 属性以减轻压力:

<p:commandButton id="b1" style="height: 30px; width: 30px;" value="a"
               action="#{turnoController.createTurno('a')}" disabled="#{bean.isButtonEnabled}" >
  <f:event name="postValidate" listener="#{bean.disableButton}"/>
</p:commandButton>

buttonEnabled 是您将在托管 bean 上定义的属性,disableButton 是托管 bean 中用于切换buttonEnabled 变量状态的方法。我选择了组件的postValidate 事件阶段,因为它在APPLY_REQUEST_VALUES JSF 阶段之后,并且可以安全地假设此时禁用您的按钮不会产生负面影响。

如果您对仅客户端的解决方案感兴趣,您可以尝试以下选项:

【讨论】:

  • 我会尝试用 ajax 来做 ;)
  • 我是按照你的方式做的......但我有一个小问题:我如何在 bean 中识别出哪个按钮正在调用???
  • 我找到了一种非常简单的方法来设置禁用选项...感谢您的想法!!!!!!
  • @dak,请在这里分享。您可以通过将ComponentSystemEvent 类型的参数添加到disableButton 方法并在参数上调用getComponent 来检索调用按钮
猜你喜欢
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2016-05-20
  • 2012-08-27
相关资源
最近更新 更多