繁体   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