2012-07-16 78 views
0

我的代碼工作正常,但我真的不能清楚地理解它。ajax重新呈現時獲取新值

有人可以解釋我嗎。

這是我的代碼:

<script type="text/javascript"> 
    var portletNamespace = '#<portlet:namespace/>\\:formId\\:'; 
    $(portletNamespace + 'drpCategory').live('change', function() { 
     alert('#{myController.simpleString}'); 
     $(portletNamespace + 'hiddenValue').ready(function() { 
      alert($(portletNamespace + 'hiddenValue').val()); 
     }); 
    }); 
</script> 

<h:inputText id="hiddenValue" value="#{myController.simpleString}" /> 

<h:selectOneMenu id="drpCategory"> 
    <f:selectItem itemLabel="Chọn thủ tục" itemValue="#{null}" /> 
    <f:selectItems value="#{myController.listCate}" var="item" itemLabel="#{item.cateNane}" 
    itemValue="#{item.cateId}" /> 
    <f:ajax event="valueChange" render="hiddenMap " listener="#{myController.changeCategory}" 
    /> 
</h:selectOneMenu> 

後,我在drpCategory改項目,JavaScript警告空字符串先的simpleString真正的價值。但是,如果我刪除第一個警報代碼,第二個將顯示舊值(在由ajax呈現之前)

例如,如果我刪除第一個警報代碼。首先,hiddenValue爲空,更改爲drpCategory值,hiddenValue更改爲'a',但javascript alert空,第二次更改drpCategory時,hiddenValue更改爲'b',但它仍會顯示'a'

編輯: 啊,我找到的東西,我已經改爲:

<script type="text/javascript"> 
    var portletNamespace = '#<portlet:namespace/>\\:formId\\:';  
    $(portletNamespace+'drpCategory').live('change', function(){ 
     setTimeout('myFunc()', 500);  

    }); 

    function myFunc(){ 
      $(portletNamespace+'hiddenValue').ready(function(){ 
       alert($(portletNamespace+'hiddenValue').val()); 
      }); 
    } 
    </script> 

回答

0

如果我理解您的方案的權利..

更改

<f:ajax event="valueChange" render="hiddenMap " listener="#{myController.changeCategory}" 
/> 

<f:ajax onevent="callThisMethodAfterValueIsUpdated" event="valueChange" render="hiddenMap " listener="#{myController.changeCategory}" 
/> 

,並在您的js添加此

var portletNamespace = '#<portlet:namespace/>\\:formId\\:'; 
function callThisMethodAfterValueIsUpdated(data) { 
    if (data.status === 'success') { 
     alert($(portletNamespace+'hiddenValue').val()); 
    } 
} 

依靠setTimeout是錯誤的原因可能有所不同不時服務器/交通......

+0

AK:d非常感謝你非常多,我花了很多的時間來找到解決方案 – user1487380 2012-07-16 06:46:42

+1

不客氣,標記答案接受然後... – Daniel 2012-07-16 07:11:16

+0

嗯,我用jQuery添加文本到,但當驗證失敗我丟失文本,你有什麼辦法來恢復文本驗證失敗後: - ? – user1487380 2012-07-17 04:37:09