【问题标题】:Boolean value not updating when using f:ajax onevent使用 f:ajax onevent 时布尔值不更新
【发布时间】:2013-11-19 18:12:29
【问题描述】:

选择一个选项时,它会触发控制器中的方法调用,该方法调用更改regionController.invalidregion值(真实为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>

【问题讨论】:

    标签: javascript ajax jsf jsf-2


    【解决方案1】:

    您没有以正确的方式使用&lt;f:ajax onevent&gt;onevent 属性应该引用函数引用,而不是像您通常在 onclick 和朋友上使用的那样包含内联脚本。 &lt;f:ajax&gt; 将调用函数引用三次,并带有隐式 data 参数。 ajax请求发送前1次,ajax响应到达后1次,基于ajax响应更新HTML DOM后1次。

    这是一个正确用法的启动示例:

    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" />
    

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多