2012-01-31 108 views
2

該場景如下所示:如何啓用/禁用JSF命令按鈕

屏幕上有兩個按鈕,比如button1和button2。在頁面加載時,button2被禁用。當用戶點擊按鈕1時,按鈕2將被啓用。我使用javascript window.onload事件和button1上的onclick事件實現了此功能。我的問題是,當用戶點擊button1時,它會觸發頁面重新加載。據說,在頁面重新載入後,由於onload事件,button2被禁用。

是否有另一種方法來實現此功能?

順便說一句,我使用的是primefaces。

+2

向我們顯示您的代碼。 – Eduard 2012-01-31 13:07:10

+0

聽起來像是你可以使用一個答案從這裏http://stackoverflow.com/questions/9000669/re-enabled-pcommandbutton-not-firing-ajax – mrembisz 2012-01-31 18:52:58

回答

11

primeface頁是這樣的,

<p:commandButton update="panel1" actionListener="#{bean.button1}" value="button1" disabled="#{bean.disable}"> 
    <f:setPropertyActionListener value="#{false}" target="#{bean.disable}"/> 
</p:commandButton> 


<p:commandButton update="panel2" actionListener="#{bean.button2}" value="button1" disabled="#{!(bean.disable)}"> 
    <f:setPropertyActionListener value="#{true}" target="#{bean.disable}"/>  
</p:commandButton> 

管理豆:

public class Bean { 

    private boolean disable; 

    // default constructor 
    public Bean(){ 
     this.disable= false; 
    } 

    public boolean isDisable() { 
     return disable; 
    } 
    public void setDisable(boolean disable) { 
     this.disable = disable; 
    } 
} 
+0

你爲什麼要叫'actionListener'? – alexander 2015-08-16 11:44:29

+0

@Kushan:你能解釋一下,你爲什麼使用'actionListener'? – alexander 2015-08-25 05:53:55

0

如果使用的是JSF 2.0,你可以使用f:ajax標籤做到這一點。

您可以在豆

disabled="#{bean.isDisabled}" 

禁用與條件的按鈕,當你重新呈現,當你點擊按鈕1按鈕,該按鈕可以啓用。

1

有一個在我看來有很多簡單的方法。

只需創建一個managed bean一個boolean屬性(吸氣劑+ setter方法)與javax.faces.bean.ViewScopedjavax.faces.bean.ManagedBean註解。

您可以通過此屬性(button2State)處理禁用狀態。

<h:form> 
    <p:commandButton id="button1" update="button2" 
     action="#{bean.setButton2State(false)}" 
     value="Enable second button" /> 
    <p:commandButton id="button2" disabled="#{bean.button2State}" 
     value="button disabled one page load" /> 
</h:form> 

的第一個按鈕調用屬性的setter,並設置button2Statefalse啓用按鈕。這個例子也使用ajax來只更新按鈕。