2014-01-23 15 views
1

在我的jsff文件中,我有一些默認情況下需要的輸入字段。現在我們需要一種方法來使用複選框來切換所需的屬性。幾種解決方案已經過測試,這樣其中的一個:ADF從複選框中切換所需的屬性

<af:selectBooleanCheckbox id="sbc1" label="myLabel" value="#{sessionBean.skipInput}" autoSubmit="true"/> 

<af:selectOneChoice label="myLabel" id="soc1" partialTriggers="sbc1" value="#{sessionScope.sessionBean.someValue}" required="#{!sessionBean.skipInput}"> 

<f:selectItems value="#{applicationScope.applicationBean.myItems}" id="si1"/> 

</af:selectOneChoice> 

當我檢查的複選框所需屬性設置爲false,selectOneChoice將紅色表示沒有價值已經被drowdown被選中。我怎樣才能防止這種情況,並簡單地從下拉列表中刪除所需的屬性?

回答

0

您的解決方案是正確的方法,但問題是隻要選擇框的required約束未滿足,ADF就不能更改複選框值。因此,只要「選擇是必需的」消息,只要在選擇框中沒有選擇任何內容,複選框的新值就不會在服務器上更新。

爲了解決這個問題,你需要在複選框immediate屬性設置爲true跳過驗證,並添加valueChangeListener處理的複選框的變化和手動調用呈現響應階段:

<af:selectBooleanCheckbox id="sbc1" label="Skip Choice" 
          value="#{sessionBean.skipInput}" 
          autoSubmit="true" 
          immediate="true" 
          valueChangeListener="#{sessionBean.toggleSkipInput}"/> 
public class SessionBean { 

... 

    public void toggleSkipInput(ValueChangeEvent vce) { 
    setSkipInput(Boolean.TRUE.equals(vce.getNewValue())); 
    FacesContext.getCurrentInstance().renderResponse(); 
    } 
} 

欲瞭解更多信息,請參閱

+0

謝謝,這還不夠。我必須在後端添加setRequired(false)才能使其工作,但它仍然顯示selectOneChoice周圍的紅色邊框。 – Daldorph

+0

您使用的是哪個版本的ADF/JDeveloper? –

+0

這是11.1.2.3.0 – Daldorph