这是我的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/