2013-05-16 42 views
1

我有一個selectBooleanCheckbox(CB)和兩個inputText s(IT1,IT2)全部有界。豆田。javascript-ajax-jsf - bean的交互

當選擇CB時,我希望IT1和IT2的值設置爲默認值並禁用,而當取消選擇CB時,必須啓用和清空IT1和IT2。

目前,我試着這樣說:

<script type="text/javascript"> 
    //<![CDATA[ 
    function myFunction() 
    { 
     if(document.getElementById("detailForm:CB").checked) 
     { 
     document.getElementById("detailForm:IT2").value = ""; 
     document.getElementById("detailForm:IT1").value = "00:01"; 
     } 
    } 
    //]]> 
</script> 

<h:selectBooleanCheckbox 
    id="CB" 
    value="#{detailModel.afterObject.defaultDefinition}" 
    onclick="myFunction()" 
    disabled="#{detailModel.mode == detailModel.viewMode or !loggedUser.isAdmin()}"> 
    <f:ajax render="IT1 IT2 @this" execute="@this"/> 
</h:selectBooleanCheckbox> 

<h:inputText 
    id="IT1" 
    value="#{bean.IT1}" 
    disabled="#{detailModel.mode == detailModel.viewMode or bean.CB}" /> 

<rich:calendar 
    id="IT2" 
    value="#{(bean.CB== false) ? detailModel.IT2 : ''}" 
    datePattern="yyyy-MM-dd" 
    enableManualInput="true" 
    disabled="#{detailModel.mode == detailModel.viewMode or bean.CB}"/> 
</rich:calendar> 

所有這一切都可以,如果我創建一個新的對象/ bean。

問題是,當我想編輯現有的對象/豆:與f:ajax render="IT1 IT2 @this" execute="@this"重新加載頁面和舊值覆蓋由JavaScript函數設置的值...

IT2的值不直接綁定到豆(value="#{(bean.CB== false) ? detailModel.IT2 : ''}")。這是因爲它必須在顯示之前進行修改。

我希望你能理解我對問題的描述,並可以幫助我解決問題。

回答

0

使用的ActionListener的複選框,並在你的監聽方法重置界複選框值(最好將這種方法在現有的動作bean類),還可以使用渲染屬性來獲取這些輸入字段的當前值。