簡體   English   中英

使用f:ajax onevent時,布爾值不更新

[英]Boolean value not updating when using f:ajax onevent

選擇一個選項后,它將觸發控制器中的方法調用,該方法將更改regionController.invalidRegion值(從true到false,反之亦然)。 問題是第一次更改后,該值不再在客戶端更新,而是在服務器端正確更改。

我有以下js;

var renderRegionMsg = function(val){
    if(val === "true"){
        alert("true");
        document.getElementById("NavForm:regionform:notInRegion").style.visibility  = "";
    }
    else{
        alert("false");
        document.getElementById("NavForm:regionform:notInRegion").style.visibility  = "hidden";
    }
};

和以下jsf代碼:

<h:selectOneMenu id="regionSelect" >
    <f:selectItems ...... />
    <f:ajax 
      id="regionListener" 
      listener="#{geoListProducer.changeRegion}" 
      render="stripe-provState" 
      onevent="renderRegionMsg('#{regionController.invalidRegion}')" />     
</h:selectOneMenu>

<h:panelGroup id="notInRegion">
    <h:outputText class="red_bold"  value="#{userController.invalidRegionMsg}" />
</h:panelGroup>

您沒有以正確的方式使用<f:ajax onevent> onevent屬性應引用函數引用,而不包含像通常在onclick和friends上使用的內聯腳本。 <f:ajax>將使用隱式data參數調用函數引用三次。 在發送ajax請求之前一次,在到達ajax響應之后一次,以及在基於ajax響應更新HTML DOM之后一次。

這是正確用法的啟動示例:

function functionName(data) {
    var status = data.status; // Can be "begin", "complete" or "success".
    var source = data.source; // The parent HTML DOM element.

    switch (status) {
        case "begin": // Before the ajax request is sent.
            // ...
            break;

        case "complete": // After the ajax response is arrived.
            // ...
            break;

        case "success": // After update of HTML DOM based on ajax response.
            // ...
            break;
    }
}

聲明如下:

<f:ajax ... onevent="functionName" />

您的特定情況下 ,您可能需要以下方法:

function renderRegionMsg(data) {
    if (data.status == "success") {
        var val = data.source.value;

        if (val === "true") {
            alert("true");
            document.getElementById("NavForm:regionform:notInRegion").style.visibility  = "";
        }
        else {
            alert("false");
            document.getElementById("NavForm:regionform:notInRegion").style.visibility  = "hidden";
        }
    }
}

<f:ajax ... onevent="renderRegionMsg" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM